Could not find com.android.tools.lint:lint-gradle:26.1.3.(android studio)(Android)(備忘録)

Android Studio 2.xで作成したアプリを Android Studio 3.1.3 でrelease Buildした所、エラーとなりました。

Android Studio 3.1.3で古いプロジェクトをオープンすると
「Android Gradleプラグインをバージョン3.1.3に、Gradleをバージョン4.4に更新することを強くおすすめします(インスタント・ランなどの最新機能、改善点、セキュリティ修正など)。 このバージョンのプラグインについては、リリースノートから学ぶことができます。」(Google 翻訳)
と聞いて来る。
4453-03.jpg

「Update」すると、エラーとなり、「Don't remind me again for this project」を選択すると、エラーは発生しません。
この記事は、「Update」した場合について書いています。



■release Buildした時のメッセージ
Could not find com.android.tools.lint:lint-gradle:26.1.3.
Searched in the following locations:
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.pom
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.jar
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.pom
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.jar
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.pom
    file:/C:/Users/xxx/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.jar
    https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.pom
    https://jcenter.bintray.com/com/android/tools/lint/lint-gradle/26.1.3/lint-gradle-26.1.3.jar
Required by:
    project :app


C:/Users/xxx/AppData/Local/Android/Sdk/extras/m2repository/com/android/には
「support」フォルダのみがあり、「tools」フォルダはありませんでした。



暫定対策


よく似たフォルダ構成の
C:\Program Files\Android\Android Studio\gradle\m2repository\com\android フォルダ配下の下記フォルダ2つを
tools
databinding

C:/Users/xxx/AppData/Local/Android/Sdk/extras/m2repository/com/android/ にコピー(※1)すると、正常にビルドできました。

■実機でインストールと動作確認
N-03E(4.1.2) インストールOK、実行OK
ZenFone Go ZB551KL(5.1.1) インストールOK、実行OK
g08(7.1.2) インストールOK、実行OK
nexus7 2013 LTE(6.0.1) インストールOK、実行OK


本来の対応方法が分かるまではこれでしのぎます。


※1
下記の2つの「tools」も存在していませんでしたが、エラーとはなりませんでした。
C:/Users/xxx/AppData/Local/Android/Sdk/extras/google/m2repository/com/android/tools/
C:/Users/xxx/AppData/Local/Android/Sdk/extras/android/m2repository/com/android/tools/



環境


4453-01.jpg

4453-02.jpg



スポンサーサイト

「アプリはインストールされていません。」と「アプリケーションへの署名」と「debug.keystore」(android studio)(Android)(備忘録)

きっかけは、
「android studio 3.1.2 で作成したアプリを ZenFone Go ZB551KL にインストール(release版)すると 「アプリはインストールされていません。」となる」
です。結論はアプリに署名していない事が原因です。
この記事は、署名に関しての備忘録として、まずはdebug版の署名に関するメモです。

アプリケーションへの署名に関してはこちら(アプリケーションへの署名)に詳しく書かれています。


「アプリはインストールされていません。」と「アプリケーションへの署名」と「debug.keystore」(android studio)(Android)(備忘録)
ZenFone Go ZB551KLにインストールした時のメッセージ


テスト


■IDE はデバッグ キーストアとデバッグ用証明書を $HOME/.android/debug.keystore に自動的に作成
C:\Users\xxx\.android\debug.keystore
C:\Users\xxx\.android\debug.keystore.lock
※以下ファイルとは上記の2ファイルを指す。

(1)ファイル消去
消去しても、デバッグビルドしたら自動的に作成された。

(2)ファイル消去前後のインストールへの影響
下記項番順にテストを実施する。

1. 消去前に実端末にgoogle drive経由でインストール
2. 実行確認
2-1. N-03E(4.1.2) インストールOK、実行OK
2-2. ZenFone Go ZB551KL(5.1.1) インストールOK、実行OK
2-3. g08(7.1.2) インストールOK、実行OK

3. ファイル消去後、android SDKを再起動し、デバックビルド
3-1. 消去した2つのファイルは再生された。

4. インストール結果確認
(実端末では前回インストールのappをアンイストールしない事)
4-1. N-03E(4.1.2) アプリ更新確認ダイアログ表示後、OKで「アプリはインストールされていません。 名前が同じで署名が競合するパッケージが既にインストールされています。」
4-2. ZenFone Go ZB551KL(5.1.1) アプリ更新確認ダイアログ表示後、「インストール」で「アプリはインストールされていません。」
4-3. g08(7.1.2) アプリ更新確認ダイアログ表示後、「インストール」で「アプリはインストールされていません。パッケージが、名前が同じ既存のバッケージと競合しています。」

5. インストールエラーの為、端末で古いアプリをアンイストール後に再度アプリをインストールし実行確認
5-1. N-03E(4.1.2) インストールOK、実行OK
5-2. ZenFone Go ZB551KL(5.1.1) インストールOK、実行OK
5-1. g08(7.1.2) インストールOK、実行OK

6. ファイルを消去しないで、リビルド後インストール、実行
6-1. N-03E(4.1.2) アプリ更新確認ダイアログ表示後、OKでインストールOK、実行OK
6-2. ZenFone Go ZB551KL(5.1.1) アプリ更新確認ダイアログ表示後、「インストール」でインストールOK、実行OK
6-3. g08(7.1.2) アプリ更新確認ダイアログ表示後、「インストール」でインストールOK、実行OK

(3)debug、release版
debug版にrelease版を上書きする場合も同様の現象となる。
対応策はdebug版をアンイストールしてからrelease版をインストールする事。

■結論
C:\Users\xxx\.android\debug.keystore
C:\Users\xxx\.android\debug.keystore.lock
を消去するとデバックビルドで自動的に生成されるが、アプリへの署名は異なる署名となり、インストール実施時に「アプリはインストールされていません。」となる。
インストールを成功させるには、現在インストールされている該当アプリをアンイストールしてから、インストールする。


release版への署名


release版の署名に関するメモは別途記事にする予定です。のつもりでしたが、「アプリの署名  -  Android Developers」に詳しく書かれていますので、取りやめとなりました。

私の場合は当面、Google Playを使用しない自分個人用のアプリの為、キーの管理は「固有のアプリ署名キーとキーストアを自分で管理」します。
また、開発環境も変更する可能性が高いので、Key store pathはプロジェクト毎にフォルダを作り管理する事にしました。


感想


最初、ZenFone Go ZB551KLにrelease版をインストールしようとして「アプリはインストールされていません。」となり、
その理由がメッセージにない為、署名だろうと思いながらも右往左往しました。

他の端末はヒントを表示しているのにZenFone Go ZB551KLは「アプリはインストールされていません。」のみ。
全てにおいて「よし」となる端末は無いような気がします。

気の向くままに、写真やエレホビーやプログラミングなどアチコチに飛び回っているので、せっかく分かった事も次に再開した時にはすっかり忘れています。
今回もAndroid Studioの使い方はすっかり忘れていました。
使い方どころかプログラミングのノウハウも90%以上は失われている感じです。

TTL7476の遅延と揺らぎ(備忘録)

以前買った秋月の超高精度・水晶発振器(12.8MHz)をアマゾンで買った「周波数カウンタ モジュール 8LED 0.1~60MHz 20MH~2.4GHz」でズレを見てみました。
12,800,024Hzでした。

秋月の超高精度・水晶発振器(12.8MHz)をヒートガンで10度以上温めても2Hzの変動でした。
カウンタも長時間安定していて、この組み合わせで4時間で1Hz程度しか動きません。

そこで、共に高精度に校正したいと思いGPSの1pps出力を利用したカウンタを作ろうと思っています。
パルスカウントはPICで、1ppsを利用したパルスゲートはTTL J-Kフリップフロップでと考えて、J-K/FFの精度を調べてみました。
※PICのみで1ppsを利用したカウント制御は今回検討対象外です。

TTL7476の遅延と揺らぎ(備忘録)


その結果は下記の通りです。

TTL7476の遅延と揺らぎ(備忘録)
黄色(CH1)が1ppsのパルスと想定したもの。 青色(CH2)がJK/FFのQ端子のTOGGLE出力(1秒パルス幅)。
このTOGGLE出力(1秒パルス幅)でもう一つのJK/FFのカウント制御を行い測定対象のfx(Hz)のパスルをゲート制御します。
ただし、出力はfx/2と1/2の周波数で出力されます。

この場合、1秒パスルの立ち上がりと立ち下がりの動作遅延の差と、次段のJK/FFのCLR端子の閾値の違いによる1秒パスルの実質的なゲート時間を知る必要があるので、上図のようにその時間差を測定しました。
立ち上がりの閾値は2V、立ち下がりの閾値は1Vと仮定しています。

その差は5.3nsなので1.0000000053秒となります。
この差は安定していれば、PICで計算により補正できます。

しかし、揺らぎがあるとその分は補正できないので、下図のように揺らぎを確認しました。
TTL7476の遅延と揺らぎ(備忘録)
30秒間の揺らぎの測定結果

揺らぎを含めて最大7.5nsの誤差が出るようです。
1秒ゲートはMAX 1.0000000075秒となり、5.3nsの補正をすれば、なんとか有効8桁のカウンタとなりそうです。

メモ


TTLは何処のメーカ製か、また品番も不明のものです。
オシロスコープはRIGOL DS1054Z
テスト用パスルはSIGLENT SDG1025

1ppsパルスの取得は秋月の「GPS受信機キット 1PPS出力付き 「みちびき」対応」を使う積りです。
この場合も、1pps出力は Typical accuracy: ±10 ns となっていますが、誤差は累積されないと思うので、1ppsをカウンタでn倍にすれば精度は更に上るかもしれません。
それもやってみたいと思っています。

ゲート制御を単純にAND回路にすればいいのですが、ICの数をケチったのとPICカウンタの動作可能周波数に余裕を持たせる為です。


完成してから、記事にしろっ!って....実行にしない可能性大なので途中結果だけでも残さないと。
以前はこんな記録はPCに備忘録として保存していましたが、やっぱりブログに入れておく方が残ります。






PIC 16F18313 クロック週数と消費電流(備忘録)

PIC 16F18313 のクロック周波数と消費電流のメモです。


OSCFRQ = 0x0; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0000:1MHz(NOSC = 110) 247.8uA
OSCFRQ = 0x1; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0001:2MHz(NOSC = 110) 356.7uA
OSCFRQ = 0x3; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0011:4MHz(NOSC = 110) 572.1uA
OSCFRQ = 0x4; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0100:8MHz(NOSC = 110) 966.1uA
OSCFRQ = 0x5; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0101:12MHz(NOSC = 110) 1.3mA
OSCFRQ = 0x6; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0110:16MHz(NOSC = 110) 1.6mA
OSCFRQ = 0x7; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 0111:32MHz(NOSC = 110) 3.2mA
OSCFRQ = 0x8; //OSCFRQ: HFINTOSC FREQUENCY SELECTION HFFRQ<3:0> 1xxx:32MHz(NOSC = 110) 3.2mA
SLEEP(); //SLEEP: 25.68uA



測定用ソース


/* 
 * File:   main.c
 * Author: test
 *
 * Created on 2017/12/15
 */

/*
 * Config 設定上の注意
 * ICD3によるデバッグを行う場合、WDTは無効にする必要がある。
 * ICD3によるデバッグを行う場合、LVPは無効にする必要がある。
 */

// PIC16F18313 Configuration Bit Settings
// 'C' source line config statements
// CONFIG1
#pragma config FEXTOSC = ECH    // FEXTOSC External Oscillator mode Selection bits ()
#pragma config RSTOSC = HFINT32 // Power-up default value for COSC bits (HFINTOSC with 2x PLL (32MHz))
#pragma config CLKOUTEN = ON    // Clock Out Enable bit (CLKOUT function is enabled; FOSC/4 clock appears at OSC2)
#pragma config CSWEN = ON       // Clock Switch Enable bit (Writing to NOSC and NDIV is allowed)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

// CONFIG2
#pragma config MCLRE = ON       // Master Clear Enable bit (MCLR/VPP pin function is MCLR; Weak pull-up enabled )
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config WDTE = OFF       // Watchdog Timer Enable bits (WDT disabled; SWDTEN is ignored)
#pragma config LPBOREN = OFF    // Low-power BOR enable bit (ULPBOR disabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bits (Brown-out Reset enabled, SBOREN bit ignored)
#pragma config BORV = LOW       // Brown-out Reset Voltage selection bit (Brown-out voltage (Vbor) set to 2.45V)
#pragma config PPS1WAY = ON     // PPSLOCK bit One-Way Set Enable bit (The PPSLOCK bit can be cleared and set only once; PPS registers remain locked after one clear/set cycle)
#pragma config STVREN = ON      // Stack Overflow/Underflow Reset Enable bit (Stack Overflow or Underflow will cause a Reset)
#pragma config DEBUG = OFF      // Debugger enable bit (Background debugger disabled)

// CONFIG3
#pragma config WRT = OFF        // User NVM self-write protection bits (Write protection off)
#pragma config LVP = OFF        // Low Voltage Programming Enable bit (HV on MCLR/VPP must be used for programming.)

// CONFIG4
#pragma config CP = OFF         // User NVM Program Memory Code Protection bit (User NVM code protection disabled)
#pragma config CPD = OFF        // Data NVM Memory Code Protection bit (Data NVM code protection disabled)

// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.

#include <xc.h>

#include <stdio.h>
#include <stdlib.h>

#define _XTAL_FREQ 1000000

/*
 * 
 */

int delay(int t,int f){
    int n = t*10*f;
    for (int i=0;i<n;i++){
        __delay_ms(100);
    }
}

int main(int argc, char** argv) {
    OSCCON1 = 0x60; //OSCILLATOR CONTROL REGISTER  NOSC:110 HFINTOSC(1 MHz)

    while (1){
    OSCFRQ = 0x0;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0000:1MHz(NOSC = 110) 247.8uA
    delay(10,1);
    OSCFRQ = 0x1;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0001:2MHz(NOSC = 110) 356.7uA
    delay(10,2);
    OSCFRQ = 0x3;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0011:4MHz(NOSC = 110) 572.1uA
    delay(10,4);
    OSCFRQ = 0x4;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0100:8MHz(NOSC = 110) 966.1uA
    delay(10,8);
    OSCFRQ = 0x5;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0101:12MHz(NOSC = 110) 1.3mA
    delay(10,12);
    OSCFRQ = 0x6;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0110:16MHz(NOSC = 110) 1.6mA
    delay(10,16);
    OSCFRQ = 0x7;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 0111:32MHz(NOSC = 110) 3.2mA
    delay(10,32);
    OSCFRQ = 0x8;   //OSCFRQ: HFINTOSC FREQUENCY SELECTION  HFFRQ<3:0> 1xxx:32MHz(NOSC = 110) 3.2mA
    delay(5,32);
    SLEEP();        //SLEEP: 25.68uA
    }
    
    return (EXIT_SUCCESS);
}

PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)

PIC 16F1827をI2Cスレーブとして用い、かつ通常はスリープしている場合の動作メモです。
クロックは内部発振器16MHzで動作させています。

※注意 本記事に私的な解釈です。間違っている可能性は十分にありますので内容についての責任は持てません。

背景


Raspberry PiのGPIOで周辺ハードウェアーを制御するには、OSを介してのハード制御の為、信号のタイミング制御が難しいようです。
そちらはOSのないPICに任せ、Raspberry PiなどのOSの存在するハードは情報処理を行という機能分担が望ましいという結論になりました。

そこで、Raspberry PiとPIC間の通信をI2Cで行う場合の実機テストをする事にしました。

省電力の意味でPICのSLEEP(※1)を利用する場合のテスト結果のメモです。

※1 I2Cは機器内通信が前提の為、電源も同一系統でマスタ、スレーブ共に電源が立ち上がり、立ち下がりも同時になることが暗黙の了解であると思われます。
各電源が別系統の場合、例えば、Raspberry Piの電源がONでPICの電源がOFFの状態が長時間続く場合、I2Cの信号線を通じて、Raspberry Piの電源→プルフップ抵抗→PICの寄生ダイオードを通じてPICに電源が供給され、PICは起動してしまいます。もちろん、安定動作はしません。
その為、十分な電力が供給される事が前提のRaspberry Piシステムで、PICを節電目的でSLEEP動作させる必要性は大変少ないのではないかと思われますが、ここではあえてSLEEPさせた場合の動作をメモしています。

テスト環境


■PIC16F1827はI2Cスレーブとして動作
リード(R)を受信すると2byteのデータ(0xd0,0xd1)を順次送信する。
■I2CマスタはRaspberry Pi
1byteのデータ(0xAA)をスレーブ(16F1827)に送信し、その後2byteのデータを受信する。


結論


I2Cのスタートbitによる割り込みを受けた時から、ストップbit割り込みを受けるまでの間はSLEEPしてはならない。


テスト方法


■main()でSLEEPのルーブをする。SLEEPしない場合はNOPのループをする。
■割り込み処理時、各レジスタの値を記録する。
■RA0~4にパルスを出力し、ソース上の通過を外部に知らせる。

■ロジックアナライザ ZEROPLUS LAP-C(16064)により下記の信号を観測
(1)SCL I2Cクロック
(2)SDA I2Cデータ
(3)RA0 割り込み処理開始を知らせるパルス
(4)RA1 レジスタ値の記録完了を知らせるパルス
(5)RA2 I2C制御完了を知らせるパルス(この後、割り込み処理を抜ける)
(6)RA3 main()のループ内処理の開始を知らせるパルス(SLEEP前)
(7)RA4 main()のループ内処理の終了を知らせるパルス(SLEEP後)
(8)CLKOUT PICクロック

PIC ソースはこちらをクリック





テスト



割り込み終了の度にSLEEPした場合


この場合、クロックストレッチが発生しない箇所ができる。
その為、次の送信データをセットする時間的余裕がなく、本来送信すべきデータが送信されない。


■クロックストレッチが発生しない箇所がある
PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)



第一群はWモードでマスターのRaspberry Piが1byteのデータを送信してきます。
アドレス受信後、SCLがLOWになりクロックストレッチ(黄色矢印)が発生しています。

第二郡はRモードでPICは2BYTEのデータを送信します。
アドレスと1byte目の間のACKはクロックストレッチ(黄色矢印)が発生していますが、
1byte目と2byte目の間のACKではクロックストレッチ(赤色矢印)は発生していません。
下図は第二郡の部分を拡大したものです。


■クロックストレッチの生成は誰の責任
PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)

■PICハードがクロックストレッチの開始を行う例
例えば、上図の赤枠の部分はPICがアドレス+Rを受取り、A-ACKを返し、割り込みを生成し、割り込みルーチンに制御が移るシーンです。
ここでSCLをLOWにしクロックストレッチを行っているのはPICのハードです。

時間順に見ていくと、
(1)ACKのクロック(SCL)の立ち下がりで割り込みを生成し、PICのスリープを解除しています。
(2)それにより、PICのクロック(CLKOUT)(白い部分)が起動されています。
(3)PICハードでの割り込み遷移処理後、割り込みルーチに入った事を示す、RA0のパルス(5)が出力されています。

割り込み処理に入った時点で多くの時間が経っており、PICハードによるクロックストレッチがなければソフトにより直接クロックSCLをLOWにしてクロックストレッチするには間に合いません。
したがってクロックストレッチの開始はPICハードの責任です。ソフトでは直接SCLをLOWにしていません。
ソフトはSSP1CON1レジスタのCKPを1にする事により、停止されているクロックを有効化し再び転送動作を再開させる事(クロックストレッチの解除)のみです。上図の時間軸上では赤枠を過ぎた右側のRA2のパルスの位置です。

■クロックストレッチが開始されない例
上図の青枠の部分はPICがアドレス+Rを受取った後、1byte目のD-ACKを返す箇所です。
この例ではA-ACKの時のようなクロックストレッチは発生していません。

ACKのクロック(SCL)の立ち下がりで割り込みが生成された以後の動作はA-ACKの時と同じシーケンスを辿ります。
ソフトでCKP=1によるクロック有効化も行っていますが、既に意味はありません。

■各割り込み時点でのCKP(SSP1CON1-bit4)の状態
PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)
ssp1con1[0] unsigned char 0x3E
ssp1con1[1] unsigned char 0x2E
ssp1con1[2] unsigned char 0x2E
ssp1con1[3] unsigned char 0x3E
ssp1con1[4] unsigned char 0x3E
ssp1con1[5] unsigned char 0x2E
ssp1con1[6] unsigned char 0x2E
ssp1con1[7] unsigned char 0x3E
PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)ssp1con1配列の添字はRA0のパルス番号

クロックストレッチが発生するA-ACKの割り込み時点のssp1con[5]のbit4はOFFでクロックストレッチ中(Holds clock low (clock stretch))を示しています。
クロックストレッチが発生しない、1byte目のD-ACKの割り込み時点でもssp1con1[6]のbit4はOFFです。
にも、かかわらずクロックストレッチは発生しません。


I2Cスタートからストップ間はSLEEPを禁止した場合



レジスタの設定環境も正しいと思われ、ssp1con1[6]のbit4はOFFになっている事からハード上の環境としてSLEEPの影響を疑い、I2Cのスタートからストップの間、SLEEPをしない様にしました。

PIC 16F1827 I2C-SLAVEモードとSLEEPの動作確認(備忘録)

上図の様にクロックストレッチが発生しデータも目的通り0xD1が送信されました。

■最後のD-NACK
2byte目送信後のD-NACKではNACKの為、データの転送は終了であり、次の送信データセットの為の時間稼ぎは必要なく、クロックストレッチは発生しません。
マスター(Raspberry Pi)はこの時レシーバであり、必要量のデータを受信した事を送信者であるスレーブ(PIC)に伝える為にNACKを送っています。



感想


A-ACKの時とD-ACKの時の違いが何なのか遂に判りませんでした。
対処方法としてこれが正しいのかも判りません。
が、無理に割り込み終了都度、SLEEPさせる必要性もそれほど無いと思われるので、これでよしとします。

今までなら、記事にもせずに何処かにメモって置くだけなのですが、それだと整理もせずに結果だけで後で何だったか全く不明という状態でした。
当ブログのような僻地ブログでも公開するとなると少しは纏めようとするので、結果自分にとっても有益です。
万一、どなたかの役に立つなら望外の喜びです。

しかし、自分ならこんな長い記事は読む気がしません。

Eclipse Raspberry Pi(Raspbian) リモートデバック設定(備忘録)

Windows上のEclipseでRaspberry Pi用のC++作成時のデバッグ設定のメモ。


設定


Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)

Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)

■「Main」タブ
Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)
※Connection欄の新規設定は下方に別途書いています。
※コピペ用 sudo chmod a+x /home/pi/work/b ←転送するファイルはこのように(b)ファイル名を変えてもよい。

■「Debugger」タブ
Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)
※コピペ用 arm-linux-gnueabihf-gdb


■Connection欄の新規設定方法
Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)

Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)

Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)



Debug実行


「Debug Dconfigurations」ダイアログの「Debug」ボタンをクリックする。


Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)

「F6」ハー押下で1step進めると
Eclipse Raspberry Pi(Raspbian) デバック設定(備忘録)


環境


Eclipse IDE for C/C++ Developers

Version: Neon.3 Release (4.6.3)
Build id: 20170314-1500



感想


「#include 」を使用すと、「Debug」でエラーとなります。
原因については調べていません。

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Windows上のEclipseでRaspberry Piのソフトを開発している時にIDE内でSSHにてRaspberry Piに接続する時に設定方法のメモ。

設定


Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

下記「My Home」をダブルクリックする
Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)



切断


Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)



再接続


Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)



Terminal接続


Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Eclipse Raspberry Pi(Raspbian) SSH接続方法(備忘録)

Indy10 Could not load SSL library 対応(Raspberry Pi)(備忘録)

Raspberry Pi Lazarusでindy10を使用して、SMTPでgmail送信をしようとした所、「Could not Load SSL Library」のエラーとなりました。
Indy10 Could not load SSL library 対応(Raspberry Pi)

indyのバージョンは indy-10.2.0.3 です。

原因は、OpenSSLのライブラリーバージョンが「システム > Indy10」とバージョンサポート範囲外でした。
システム側の利用出来るバージョンは 1.0.0 で Inyd10が対応しているバージョンは 0.9.9~0.9.6 でした。

■対策
Indy10側で対象バージョンを無理やり、 1.0.0 もLoadLibray()の対象としました。
バージョン違いによる弊害は「幸運を期待する」です。

※なお、この対策をしても、Lazarusのデバッグモードでは「例外クラス'Extemal:SIGILL'」が発生します。実行ファイルを直接実行させると例外は発生しませんでした。よって、この件は将来の叡智に任せる事にしました。(使えればいいじゃん!)



環境


ハード:Raspberry Pi 3 Model B V1.2
pi@rp3a:~ $ uname -a
Linux rp3a 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux
pi@rp3a:~ $ 

pi@rp3a:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
pi@rp3a:~ $ 

pi@rp3a:~ $ openssl version
OpenSSL 1.0.1t  3 May 2016
pi@rp3a:~ $ 

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

Indy10 : indy-10.2.0.3.tar.gz



テストプログラム



メイン
unit u_app;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, IdSMTP, IdSSLOpenSSL, FileUtil, Forms, Controls, Graphics,
  Dialogs, StdCtrls,
  IdMessage;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    IdSMTP1: TIdSMTP;
    IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  idmessage: tidmessage;
begin
  memo1.Lines.add('send start.');

  idmessage := tidmessage.Create(nil);
  idmessage.attachmentencoding := 'MIME';
  idmessage.charset := 'UTF-8';
  idmessage.ContentTransferEncoding := 'BASE64';
  idmessage.contenttype := 'text/plain; charset=UTF-8';  //←ここがポイント

  idmessage.from.address := 'ffffff@gmail.com';
  idmessage.recipients.emailaddresses := 'rrrrrr@gmail.com';

  idmessage.subject := 'test ' + formatdatetime('yyyy/mm/dd hh:mm:ss', now);
  idmessage.body.Text := 'test body.' + #$0d#$0a + '日本語' + #$0d#$0a +
    formatdatetime('yyyy/mm/dd hh:mm:ss', now);

  idsmtp1.connect();
  try
    idsmtp1.send(idmessage);
  finally
    idsmtp1.disconnect;
    idmessage.Free;
  end;

  memo1.Lines.add('send end.');
end;

end.


TIdSMTPとTIdSSLIOHandlerSocketOpenSSL
  object IdSMTP1: TIdSMTP
    IOHandler = IdSSLIOHandlerSocketOpenSSL1
    Host = 'smtp.gmail.com'
    Password = 'xxxxx'
    Port = 465
    SASLMechanisms = <>
    UseTLS = utUseImplicitTLS
    Username = 'xxxxxx@gmail.com'
    Left = 96
    Top = 40
  end

  object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
    Destination = 'smtp.gmail.com:465'
    Host = 'smtp.gmail.com'
    MaxLineAction = maException
    Port = 465
    DefaultPort = 0
    SSLOptions.Method = sslvSSLv23
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    Left = 120
    Top = 104
  end




経過


エラー発生時の経過を辿って行くと、下記の青枠の LoadLibrary() で複数のバージョンのロードを試みていますが、全て失敗しています。
Indy10 Could not load SSL library 対応(Raspberry Pi)

上記の赤枠の ALibVersions[] をみてみると、

Indy10 Could not load SSL library 対応(Raspberry Pi)

0.9.9~0.9.6 となっていました。
※先頭の「.」があるのとないのがありますが、これでよいのか不明です。

ldconfig -v で調べてみると

pi@rp3a:~ $ ldconfig -v

/usr/lib/arm-linux-gnueabihf:

   libssl.so.1.0.0 -> libssl.so.1.0.0

   libcrypto.so.1.0.0 -> libcrypto.so.1.0.0



.1.0.0 となっているので、

下記のように、 .1.0.0 を追加しました。

Indy10 Could not load SSL library 対応(Raspberry Pi)


これで、 gmai 送信できましたが、冒頭の記述のようにLazarusのデバッグモードでは「例外クラス'Extemal:SIGILL'」が発生します。
実行ファイルを直接実行させると例外は発生しませんでした。



例外クラス'Extemal:SIGILL'を追う


これを追っていくと、

こんな箇所に遭遇しました。
Indy10 Could not load SSL library 対応(Raspberry Pi)

{}のネスト不良がありました。
修正方法がわからないので、(* *)でコメント化し、万一この関数を呼ばれた時の為に、 raise を入れて置きました。
ただし、これを行っても結果はなんら変わりませんでした。

Indy10 Could not load SSL library 対応(Raspberry Pi)

※しかし、このような状態でコンパイルが通ったのかは判りません。これも「将来の叡智に任せる」ですね。



感想


色々探っているなかで、if xxx then begin xxx; exit; end; で exit; を通過しているにもかかわらず、exitしないで次の文に制御が移ります。
「コンパイラオプション」で「最適化なし」にすると、この現象は無くなりました。

色々、難問が残っていますがとりあえずこのまま使ってみます。



Lazarus ソースエディタで入力ダブリ(Raspberry Pi)(備忘録)

Raspberry Pi 3上のLazarusにおいて、ソースエディタで半角英文字を入力すると、
1文字入力で2文字表示される。
ただし、この現象は「オブジェクトインスペクター」や「Leafpad」では発生しない。

暫定対策は 「Raspberry Pi設定」のローカライゼーションを「en(Englich)」にして、この現象を逃げる。

ダブリが発生する時


Lazarus ソースエディタで入力ダブリ(Raspberry Pi)



正常に入力できる時


Lazarus ソースエディタで入力ダブリ(Raspberry Pi)
※Lazarusの「IDEオプション」→「環境」→「一般」→「言語」は「日本語[ja]」に設定しても正しく動作する。



環境


ハード:Raspberry Pi 3 Model B V1.2
pi@rp3a:~ $ uname -a
Linux rp3a 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux
pi@rp3a:~ $ 

pi@rp3a:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
pi@rp3a:~ $ 

pi@rp3a:~ $ openssl version
OpenSSL 1.0.1t  3 May 2016
pi@rp3a:~ $ 

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)(備忘録)

Raspberry Pi 3(Raspbian)に indy-10.2.0.3 をインストールした時のメモです。

■不具合との遭遇
(1)indy10をLazarusに組み込む為に、コンパイルをするとエラーとなります。
(2)indyとは無関係に、ソースエディタで半角文字を一文字入力すと二文字表示されます。(電動タイプライター風にいうとダブリます)
(3)indy10が対応しているSSLのバージョが古い為にSMTP利用時にSSLが使用できない不具合があります。(ライブラリーロードエラー)

(1)の対策は本記事で対策しています。
(2)の対策は、Lazarusのソースを修正する必要があると思われますが、困難なので暫定的に環境で対応しました。(別記事)
(3)の対策は、幸運を期待した対策をしました。(別記事予定)


要点版


indy10のダウンロードはコチラから
indy-10.2.0.3.tar.gz をダウンロードする。

■解凍後フォルダ名変更
「fpc」フォルダ → 「indy_fpc」
「lazarus」フォルダ → 「indy_lazarus」

■フォルダをコピー(windows上で作業の場合)
「indy_fpc」 → 「/usr/local/fpc/source/packages」に
「indy_lazarus」 → 「/usr/local/share/lazarus/components」に

■パーミッション変更
0777に変更する。
「/usr/local/share/lazarus」
「/usr/local/fpc」

■パッケージ lpk ファイル指定
メニュー「パッケージ」 → 「パッケージファイルを開く」
/usr/local/share/lazarus/components/indy_lazarus/indylaz.lpk

■パッケージOptions指定
「コンパイラオプション→パス」 → 「Other unit files(-Fu)」欄の横の「...」をクリックする。
「/usr/local/fpc/source/packages/indy_fpc」を指定

■パッケージコンパイル
「パッケージダイアログ」の「コンパイル」クリック

■バグ修正
idMessageの831行目の if Encoding = meMIME then でErrorとなるので、
これを if self.Encoding = meMIME then と修正する。

■再度コンパイル

■パッケージのインストール
「パッケージ」ダイアログの「Use」→「インストール」をクリックしてインストール。



画像付版


環境


ハード:Raspberry Pi 3 Model B V1.2
pi@rp3a:~ $ uname -a
Linux rp3a 4.9.24-v7+ #993 SMP Wed Apr 26 18:01:23 BST 2017 armv7l GNU/Linux
pi@rp3a:~ $ 

pi@rp3a:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie
pi@rp3a:~ $ 

pi@rp3a:~ $ openssl version
OpenSSL 1.0.1t  3 May 2016
pi@rp3a:~ $ 

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)



準備


■indy10 ダウンロード

indy10のダウンロードはコチラから
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
indy-10.2.0.3.tar.gz をダウンロードする。

■indy10 解凍

windows上で解凍しました。
7-Zipでindy-10.2.0.3.tar.gzを解凍後、解凍されたindy-10.2.0.3.tarを更に解凍。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
解凍されたファイル

■フォルダ名変更(任意)

解凍されたファイルの2つのフォルダの名前を下記のように変更する。
(indyである事と用途が分かるように)(他とダブらなければ任意の名前でよい)

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

■解凍したファルダをRaspberry Piに転送
windows上で作業しているので、解凍した内2つのフォルダをlazarusに転送する。
転送はWinSCPでしました。ログインはrootで。

(1)indy_lazarusファルダ

下記のようにcomponentsフォルダに転送する。
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
転送結果

componentsのフォルダの位置は環境により変わるので注意。
components中の他のフォルダに「.lpk」が存在する事で確認しました。

(2)indy_fpcフォルダ

下記のようにpackagesフォルダに転送する。
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
転送結果



作業性向上の為に


Lazarusのインストール等はrootで行いましたが、indyインストールの作業やアプリの作成はpiでするので、
色々面倒な事を避ける為 lazarus と fcp のフォルダのパーミッションは何でも可にして置きました。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

下記のエラーは「スキップ」で対応。
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

/usr/local/fpcも同様に処置します。



パッケージのインストール



■Lazarusを起動し、 メニュー→パッケージ→パッケージファイルを開く をクリック。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

■indylaz.lpkを開く

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

パッケージダイアログが開いたところ
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

■Option指定

上記画面の「Options」をクリックする。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

「コンパイラオプション」ダイアログで「コンパイラオプション→パス」を選択し、
「Other unit files(-Fu)」欄の横の「...」をクリックする。

表示された「パスエディタ」ダイアログの「検索パス」グループの検索用フォルダマークボタンをクリックして、
先程、コピーした「indy_fpc」を指定する。
その後、「追加」ボタンをクリックして、一覧に追加する。
Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
追加後の画面

「OK」をクリックして戻る。

■パッケージをコンパイル

「コンパイル」ボタンをクリックしてコンパイルする。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

■バグ修正

idMessageの831行目の if Encoding = meMIME then でErrorとなるので、
これを if self.Encoding = meMIME then と修正する。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

赤枠が修正対象行。 水色枠は原因行でwithによる限定子省略の戻し忘れが原因と思われる。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)
修正後

■再度コンパイル

「コンパイル」ボタンをクリックしてコンパイルする。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

コンパイル成功

■パッケージのインストール

「パッケージ」ダイアログの「Use」→「インストール」をクリックしてインストール。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

Lazarus再構築の許可を与える。
「はい」ボタンをクリックする。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

パッケージのインストールが完了し、Lazarusが再起動される。

Raspberry Pi 3(Raspbian)に indy10 をインストール(Raspberry Pi)

indy登録完了。


お知らせ
■注意:Google Chrome以外のブラウザでは動作しない事もあります。
お好みに応じて
画像だけの表示でいいよ
やっぱり全部表示して
背景は黒がいいな
背景を元に戻して
サブジャンル
メモリアルマップ
My Favorite Photo
検索フォーム
プロフィール

otsu.usiwakamaru

Author:otsu.usiwakamaru
五条の橋でひらりひらりと欄干を飛び渡る牛若丸のように、興の向くまま電子回路にプログラミングに写真にと飛び回っています。

プロフィール詳細

カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
キーワード
クリックしたキーワードの記事のみ表示します。

ダンサー ミニー ミッキー デイジー ドナルド グーフィー キャラクター  3D 試み MFP 電池 ティンカーベル デザイン クラリス 全天球 チップデール プルート パークテーマ キャスト IXY スクルージ マレフィセント スモールプラネット ダッフィー SPOT 改造 

最新記事
月別アーカイブ
全記事表示リンク

全ての記事を表示する

おすすめプログ(新着記事)
リンク


にほんブログ村
カテゴリ
橋 (1)
PIC (3)
カウンタ
訪問者数(UU)

アクセス数

現在の閲覧者数

tael no013用