今さらAVRの書き込み基板を作ってます。
ワンボードにAVRを2個乗っけて、モニタ用(マスタ)とプログラム実行用(スレーブ)のそれぞれで使用して、
PCからUSB1本でプログラムの書き込みから実行までできるような基板です。
基板の詳細についてはまた別の機会に書くことにして、早速失敗に気づいたので、まずはそちらから…。
UARTからデータの送受信をするプログラムを作成して実行してみるも、何かうまく行かない。
オシロで見てみるとボーレート自体は問題なさそうだし…って、なんでマイナスの電圧が?というので気づきました、レベル変換入れてない…。
そういう設計でも(仕様通りなら)良かったんですが、少なくとも今使っているUSBシリアル変換はRS-232Cのレベルでしか受けてくれません(なので仕様通りじゃない)。
こういうときのため、以前にMAX232を使ったレベル変換基板を作ったので、それを使ってみることに。
が、これもこれでよく調べてみると、この基板は電源をマイコン側から取るようになっている(当然RS-232Cのコネクタにも電源はないので、MAX232を動かすための電源が取れない)。
今回作った基板は添付の画像のようにRX, TX, GNDの3線しか出していません(ここにVCCがあれば解決する問題だった)。うーん…ダメじゃん。
そうなるとCMOSレベルで受けられる、USBシリアル変換を買うか、あるいは作るかになりそうです。
Raspberry Pi 4b (4GB model)を購入しました。
秋月のセットを購入。
いろんなところで売っているのでどこで買ってもよいんだけど、
電子部品を買う必要があり一緒に通販で購入しました。
当面の用途はローカルのDNSリゾルバにすること。
ルータがEDNS0に対応していないためGoogleのDNSを使っているのですが、
いくらレスポンスが早いと言っても、やっぱりローカルでDNSは持ちたい。
あと、ローカルに常時電源入ったデバイスがほしかったというのも理由。
買うときに少し悩んだのが発熱がどうなのかという点。
早速購入直後の状態で確かめてみたところ、以下の通りでした。
ちょっと高いかな…。
ちなみに、1コアだけCPUに負荷をかけると以下の通り。
室温が23度の条件で上記なので、夏場は厳しいかも…。
ちなみに、Power Management の状況を確認したところ、idle時は600MHz、
一方で高負荷時は1.5GHzで動作している。
気休めにヒートシンクはつけてみたものの、あまり変わらず…。
うん、何となくそんな気はしていた。
運用してみてあまりにも酷ければ、ファンをつけることも考えよう。
必要な設定項目を設定。
GUIは停止して、SSHは常時起動に変更。
最後にバージョンを確認。
kgdbを使ったLinux Kernelのデバッグ方法をまとめてみました。
この説明は以下の内容を元にして、具体的な手順を説明したものです。
kgdb, kdb の使い方と、カーネルデバッガーの内部
https://sites.google.com/site/kandamotohiro/linux/kgdb
まずはカーネルの設定を確認。以下の通りに設定をします。
ビルドして起動できることを確認します。
ホストとターゲットは2本のUARTで接続します。
1本はカーネルログの出力確認、breakコマンドの入力、シェルの操作を行うために使用します(以降の説明ではUART0)。
もう1本はkgdbの通信用に使用します(以降の説明ではUART1)。
UARTが1本しかないケースは、SSHで代替することもできます。
ただし、この場合、任意のタイミングでbreakをかけられないことと、カーネルログの出力が確認できないため、あまりおすすめはしないです。
カーネルの引数にkgdbwait, kgdbocを追加します。
kgdbwaitは、カーネル起動時にkgdbの接続を待ちます。
kgdbocはUART経由でgdbに接続することを指定します。kgdbocには使用するttyとボーレートを設定します。
以下はUART1に対して、115.2kbpsのボーレートを設定しています。
1kgdbwait kgdboc=ttyS1,115200
またカーネルログの出力先は以下のとおりUART0に対して設定します。
1console=ttyS0,115200
カーネルを起動して、以下の表示が出るとkgdbの接続待ちの状態になります。
ホストからターゲットのカーネルに対して、gdbでアタッチします。
ビルドしたvmlinuxをgdbで読み込みます。
ターゲットがロードしたカーネルがzImageの場合でも、シンボル情報が必要になるためvmlinuxをロードします。
1$ arm-linux-gnueabihf-gdb vmlinux
次にkgdbocでUART1に対してアタッチします。
以下はホストの/dev/ttyUSB2とターゲットのUART1が接続されている例です。
接続に成功すると以下のようにbreakpointで停止します。
ほとんどの操作はgdbと同様に行うことができます。
以下によく使う操作を記載します。
ブレークポイントを設定&実行を再開する
手順はgdbと同様です。
以下はuio_readにブレークを設定する例です。
1(gdb) b uio_read 2Breakpoint 1 at 0x803d910c: file drivers/uio/uio.c, line 812. 3(gdb) c 4Continuing. 5[New Thread 1172] 6[New Thread 1135] 7[New Thread 1143] 8[New Thread 1146] 9[New Thread 1152] 10[New Thread 1153] 11[New Thread 1167] 12[Switching to Thread 1172] 13 14Thread 42 hit Breakpoint 1, uio_read (filep=0x839f9240, buf=0x7ef96c20 "", count=4, ppos=0x83bdff80) at drivers/uio/uio.c:812 15812 { 16(gdb)
任意のタイミングでブレークをかける(つまり実行を停止して、gdbで操作できる状態にする)には、ホストからUART0に対してSysRq + gを入力します。
ホストからUART0への接続にscreenを使っている場合には、Ctrl-a -> b -> gでSysRq + gの入力できます。
SysRq +g を受け付けるとUART0には以下のように表示されます。
1# sysrq: SysRq : DEBUG
gdbは以下のようにブレークがかかります。
カーネルのconfigを一部設定変更したいと思って、menuconfigを探してみるもなかなか見つからないことが多い。
.configをテキストでざっと見つつ、メニューの階層を推測して…といままでやってたんですが、
実はmenuconfig上で検索できることを知りました。これはすごく便利。
やり方は、menuconfigのUIで"/"を入力すると検索ができます。
例えば、MAGIC_SYSRQを探した結果は以下の通り。
左側に(3)や(4)などの数字が出ているので、それに対応するキーを押すとジャンプできます。
またselected byやdependsが書かれているので、ここからどういう条件でそのメニューが有効になるか、確認ができます。
あけましておめでとうございます。今年もよろしくお願いいたします。
毎年恒例の目標をまとめてみたました。今年の目標は以下の通り。
2020年もがんばっていきたいと思います。
気づくと一年間日記を書いていませんでした。。。
年末なので今年の振り返り。
仕事や家庭などいろいろとありました。
トータルで見れば充実した一年だったのかなぁと思います。
さて、新年に立てた目標は…と見返すと、あまり課題の設定方法が良くなかった気がします。
どちらも具体的な成果にはなっていないものの、自分の中では少しづつできてきてるのかな(笑)
今年も一年ありがとうございました。来年もよろしくお願いいたします。
あけましておめでとうございます。
今年もよろしくお願いいたします。
一年の抱負を考えてみました。
実現できるよう、今年もがんばっていこうと思います。
今年も一年お疲れ様でした。
振り返ってみると、様々なできごとがあって充実した一年だったと思います。
今年のはじめに立てた目標に対しては、以下の結果となりました。
明日は2019年の目標を立てたいと思います。
皆様、良いお年をお迎えください。
■ 状況
railsでbeforeunloadイベントを使用して、ページ遷移時に警告を出そうとしたところ、aのリンクで意図した動作がしない。
■ 原因
railsでturbolinkを使っている場合、ページをリロードせずに画面を書き換えるため、beforeunloadイベントが発生しない。
■ 対策
対策としては以下のあたり。
マイコンの割り込みをLinux上でシグナルとスレッドを使って再現してみた。
大まかな処理は、マルチスレッドで制御のスレッドとマイコンの処理相当を行うスレッドの2つを作成、
制御側からマイコンの処理相当のスレッドをシグナルで一時停止させ、その間に割り込みハンドラを実行する。
フルのソースコードは以下を参照。
https://github.com/yasuharu/micon_int_on_linux/
まずマイコン側の処理。UARTの受信を意図したもの。
uart_rx_handlerが割り込みハンドラ、micon_mainがマイコン側のメイン処理。
メイン側の処理は、マイコン用のスレッドを作成し、一定期間ごとに割り込みを生成する。
割り込みの生成タイミングは、お好きなタイミングでどうぞ。
シグナルはSIGUSR1とSIGUSR2を使用する。
SIGUSR1はマイコン側の処理をsuspend、SIGUSR2はマイコン側の処理をresumeするために使用する。
micon_thread内で以下の通り初期化する。
1void micon_thread() 2{ 3 struct sigaction sigusr1, sigusr2; 4 5 sigusr1.sa_flags = 0; 6 sigusr1.sa_handler = micon_thread_signal_usr1_handler; 7 sigemptyset(&sigusr1.sa_mask); 8 sigaction(SIGUSR1, &sigusr1, NULL); 9 10 sigusr2.sa_flags = 0; 11 sigusr2.sa_handler = micon_thread_signal_usr2_handler; 12 sigemptyset(&sigusr2.sa_mask); 13 sigaction(SIGUSR2, &sigusr2, NULL); 14 15 micon_main(); 16}
今回のポイントは、以下のコードの部分。
suspend/resumeでマイコン側のスレッドを一時停止させる。
SIGUSRT1のハンドラ(micon_thread_signal_usr1_handler)内では、
sigsuspendを呼んで、SIGUSR2が発生するまで待つ。
割り込みハンドラはメインのスレッド、シグナルのハンドラはマイコンのスレッドと、
それぞれで実行しているコンテキストが違うことに注意が必要。
特にシグナルのハンドラのsigsuspendを実行する前に、割り込みハンドラが実行されないよう、
int_statusで処理待ちを行うようにしている。
(ちなみに、int_statusは本来であればmutexでロックが必要)
割り込みが発生したときの処理をまとめると以下の図になる。
do_irq_handlerはこんな感じ。
int_statusを待つことだけ注意。
とあるデータの予測をしたいため、ディープラーニングをはじめてみた。
経緯としては、今まではルールベースでの予測だったものの、あまり精度が伸びず。
ディープラーニングでうまくいかないか試行錯誤してみることにしてみました。
まずは手元のMacBookProにTensorflow + Kerasの環境を構築。
UbuntuのVM上で構築したので、pipでさくっと入って良い感じです。
Jupyter notebookを使いたかったけど、こちらはPython 2.7上に入れようとしたのが問題なのか、
依存関係が不適切になってしまい断念。まぁなくてもどうにかなるでしょう。
まずは試しにMNISTのデータセットのexampleを動かしてみる。
https://github.com/keras-team/keras/blob/master/examples/mnist_mlp.py
K520 GPUだと2秒かかる学習をi7-6700HQだと10秒ほど。約5倍…。
実際にモデルを組んでみて、どうにもならなければディープラーニング用のマシンを用意したほうが良いかも。
ひとまず動くところまでは確認できたので、モデルの作り方を検討しながら、Kerasの使い方を調べてみよう。
■ 2017年について
今年は家庭状況が大きく変わりました。
大変なことも多いけど、楽しいことも多く、元気にやってます。
このブログの主としている技術的なことに関していえば、
必要な時間を割くことができずアウトプットがほとんど出せませんでした。
本当に自分が楽しいと思えることをじっくりとやっていくことが大切、と
思えるようになってきたので、着実にやっていくことを心がけていこうと思います。
さて、2017年の目標に対しての到達状況を見てみましょう。
トータルで見れば意外と進んでるのかなと。良かった良かった。
■ 2018年について
大きな方向としては、楽しく面白い一年にしていきたいです。
家庭と仕事とやりたいことと大変なことも多いけど、がんばっていきます。
そんな2018年の目標は以下の通りです。
あと、日記も全然書いていなかったので書いていこうと思います。
以下の2つのETFで分配金に対する課税が異なることに気付いた。
同じiシェアーズの外国株式だから、30% * 20.315% と思ってた。
これは誤り。以下のようになる。
そもそも、上記の税率は <現地国での課税> + <国内での課税> から求められる。
30%の部分はあくまでも米国で課税をされた場合。
また、iシェアーズのETFでもファンドの籍が異なるケースがある。
米国以外の場合、<現地国での課税>がなくなり<国内での課税>のみになるケースがある。
「1362 iシェアーズ 新興国債券ETF-JDR」の場合は、上記のケースにあたり、<国内での課税>のみになる。
※「<現地国での課税>がなくなる」の理由は、二国間租税条約に基づいて、居住国でのみ課税されることと推測しています。
ちなみに、NISAの場合は、<国内での課税>も非課税になるので、結果として0%になる。
以下の資料を参考にしつつ、内容に注意をして記載をしています。
本当に困っている場合は、この記事をあてにせず専門家に相談しましょう。
料理の四面体を読了。
料理を火、水、空気、油の4要素で考えるとこうなるんだね。
各国の料理の共通性はわかりやすい。
https://www.amazon.co.jp/dp/B073DYQNC9/
午前は立川へ。
最近、日光の眩しさが気になってきて、サングラスを探しに行った。
普段も使えて、スポーツ(自転車)でも使えるのが欲しくて、いろいろと見て回る。
一つの候補はアディダスのかなぁ。その場では購入せず。
帰ってきて、オークリーのFlak Jacketというのも気になる。問題は値段。。。
他の人が自分の日記を見てどう評価するか?ってことばかり考え始めると、
変に肩肘張ってしまって何も書けなくなってしまっていた。
ゆるっと、あったことをそのまま書いていくのが良いのかなぁ、と
とある人の日記を見ながら思ったりして、あれこれと書いてみようかなと。
先週一週間、休みを取って実家に帰って過ごしていた。
休日の濃密感に比べると、平日があっさりと過ぎてしまうことが多く、何かもの足りない…。
気づくともうこの時間なので、さっさと寝なければ。。。
今住んでいる市の有料ゴミ袋の色(袋自体の色のこと)が以下のようになってるんです。
これ、色が逆なんじゃないかなぁと思うんですよね…。
黄色 = 燃えるを想起してしまうような気がするんだけど、そんなことないのかなぁ。。。
WRC-1167GHBK-Sを使って、L2TP over IPsecをすると接続に失敗する。
パケットをキャプチャしてみると、最初の通信の段階でリクエストに対する、応答が返ってきておらず、タイムアウトしているようにみえる。
試しに、L2TP over IPsecに使用している500番ポートをポートフォワーディングすることで、VPN接続できることが確認できた。
同一の環境でルータの違いだけで問題の有無が変わっているので、
L2TP over IPsecのフォワーディングがうまくできていないんじゃないかなぁ…。
elecomに直接問い合わせをしてみようとは思ったけど、
簡単なサポートを目的とした電話サポート窓口しかないみたいなので、諦めることにした。
初詣でおみくじを引いた結果、今年は吉でした。
自分の芯を持つように、とのことで、何か仕事上で心当たりのありそうな…
苦労はあるけども頑張りましょう、ってところかなー
あけましておめでとうございます。
昨年一年の振り返りとともに、今年の抱負を考えてみました。
トータルとしては、仕事とプライベートと良い一年であったと思います。
特に仕事の方は、いろいろな問題があったものの、問題を解決しながら少しづつでも前に進められています。
ただ、その一方で悩みは多い一年でした。
一つは、明確な目標がない課題に対して、モチベーションをどう保っていけばよいか、わからなくなってしまいました。
ここで言う「課題」は新規のアイディアや個人のプロダクトのことです。
結果としてだらだらと無為に時間を過ごすこととなり、思うように成果が残すことができませんでした。
まだはっきりとした答えにはたどり着けていないけども、一つには明確な道筋を立ててみること。
もう一つは、ダメかもしれないと手を止めるのではなく、ある程度は思い切りをもって(やる気がなくても)やってみること。
今のところはトピックレベルですが、はっきりとした答えが出たら、考えをまとめてみたいです。
もう一つは、自分の意見の伝え方や理解力に対して、未熟さが見えてきました。
例えば、人が2,3歩先を考えていることに対して、自分自身が1歩先までしか考えらていない点です。
また、理解はできていたとしても、それをうまく整理して相手に伝えられるかどうか、という点もあります。
いろいろな人と話しているとヒシヒシと感じることが多く、昨年は悩まされました。
ただ、今までは他の人と考えていることが違うことにすら、気づけてすらいなかった点なので、
そこを起点として考えると良くはなっていると思います。
今後も試行錯誤しながら、もっと伸ばしていけるかどうかが重要な点ですね。
以上のような昨年の状況も踏まえて、今年は以下のことを抱負にします。
またこの日記について、ここ数年は更新頻度が落ちていましたが、今年は書く頻度をあげて行きたいです。
これは、モチベーションを保っていく意味でも重要なことだと思っています。
一つでも多く実現できるように頑張っていきます。
今年も一年よろしくお願いいたします。