[管理者用]

イゼルローン日誌
宇宙・・・それは人類に残された最後の観光地である

         
戻る 
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
1998年
1999年
2000年
2001年
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年

2018年11月
11月30日 ・というところで、11月も終わり。カレンダーもあと1枚。
・そんなところで、ボチボチとFatFSを弄ってみる。結構大変そうだな。

11月29日 ・ラジオで時々トークを聞いていてた勝谷誠彦氏が亡くなったというニュースを昨日聞いた。いろいろな人がお悔やみを述べている。もし自分が死んだとしても、こんな風に悔やんでくれたり、惜しい人を失くしたなんて言う人は多分いないだろうなとぼんやりと眺めている。彼に限らずこのくらいの年齢になれば人それぞれそれなりの人生の成果を上げている。自分にはそんなものが何もないな。叩き潰されてようやく這い上がったと思ったらまた潰されて、そこから這い上がったと思ったらまた潰されての繰り返し。最後の殻に閉じこもっているような状態だけど、そのうちこの殻も割れて中の自分もろとも粉末になってどこかに飛んでいくのかな。
・そんなところでSPIバス動作の確認。データが出てこないなと思っていたら、ロジック・アナライザのサンプリングレートが大きすぎたということに後で気付いた。
・とりあえずデータ入出力でチェックしてみたけど、なんかうまく行っているように思えないな。散々悩んだ挙句にもう一回ロジック・アナライザで確認したらちゃんとデータが出て、うまく動いていた。なんだ、確認のミスか。なんだか気が抜けた。ソフトウェアでセレクト信号を生成してみたけどCPUも流石に速いな。数MIPSの8ビットマイコンとは大違いだ。
・さて、とりあえず動いたのでこれでgit commitしておこう。

11月28日 ・SPIまわりを更にすすめる。ほんと、「使わないでくれ」と言っているようなサービスの悪さ、なぜか日本語での検索がかからないマニュアル、まともに動かせないサンプルプログラム…と何拍子も揃っているな。
・そんなところで、SDカードコネクタをつけるべくハンダ付け。そういえば、既に廃盤となったPSoCのSDカード評価キットに手頃な変換アダプタがあったなと引き出しを漁ったら出てきた出てきた。これにピン配置を合わせておけば良いだろう。
・ハンダ付けをしてテスターで配線チェックしたら何かおかしい。何度も確認してやっていたはずなのに、ピンの数え方を間違えているのか。なんか疲れているかな。

11月27日 ・このところ不調だな。まぁ仕方がない。人生そんなもんだろう。
11月26日 ・続いてSPIまわり。これまた絡んでいるレジスタがたくさんあって、しかも入り組んでいて面倒くさい。やっと少しかたちになってきたか。それにしてもなんでこんな不毛な作業に時間を食われなくてはならないのだろうな。全く面倒くさいったらありゃしない。あぁ、PSoCだったら楽だったのにな。
11月25日 ・ようやくRTCが動いた。サンプルを見ながらやっていたのだけど、サンプルどおりにしたら変な動きをする。コールドスタート後にいくら時刻を読みだしても値が変化しないのに、実は裏ではしっかりカウントしているようで、ちゃんと定周期割り込みも入るし、ウォームスタートしてみると今度はちゃんと読み取れて、しかも先ほどコールドスタートをした時の時刻(コールドスタート時に初期化している)からそれなりの経過時間になっていること。つまり、裏ではうごいているということだ。何が起きているのかわからないけど、RTCをリセットしているところをコメントアウトしたらうまくいくようになった。
11月24日 ・RTCを動かすのにちょっと難儀する明日もう少し調べてみよう。
11月23日 ・なんとなく「ちくま」を開く。岸本佐和子さんのエッセイで「(電車に乗るとき)素早く周囲を見回し…(中略)…大声で独り言を言っている人…(中略)…などからなるべく距離をとる。(中略)…そうして危険な人危険な場所を全て避けて…(以下略)」とあった。多分平日だろうし、たぶんそれは作業所などに一人通勤している彼らなのだろうけど、そうだな、やっぱりそう思われるのだろうなとちょっとそちらの世界とつながりのある自分としては少し寂しい気持ちになったのであった。
11月22日 ・こうやってちょっと離れたタイミングで何故かメールだの電話だのが入っている。いつもずーっと居てもなんの連絡もないのに、何故いつもこういうタイミングなんだろう。
・というところでUART周りのテスト。とりあえず送信データが出ることは確認出来ているので今度は受信。USBシリアル変換を持ってきてブレッドボード用のQIコネクタ付きのワイヤでつなぐ。
・ところが、これがなかなかうまく言うことを聞いてくれない。どうも受信割り込みがうまく入ってきていないようだ。
・じっとプログラムを見ていたら、割り込みコントローラの割り込み解除の設定を忘れていたり、UARTのユニット#1を使うはずが#0の方のレジスタを弄っていたりと、凡ミス連発だったことが分かった。修正してビルドして動かしたらうまくいった。
・これでUARTの送受信ともできるようになったので、とりあえずターミナルからの入力文字のエコーバックをさせる。リングバッファの管理もうまくいっているようだ。これでいろいろんあものを表示できるし、デバッグがだいぶ楽になるな。さぁ、次はRTCかな。

11月21日 ・帰宅。少し遅くなったこともあってそのまま行き倒れ状態。仕事の方もあまり進まなかった。暇なかったしな。
11月20日 ・ということで、ちょっと遠方・・というほどでもないけども。それほど距離はないけど少し温暖な気がする。いろいろ考えることはあるなと思いつつとりあえず過ごす。
11月19日 ・シリアルポートを動かそうとやってみたら・・・全く応答無し。さて、どこから手をつけたものかな。
・そんなこんなでドラマの「今日から俺は!!」の主題歌が懐かしい。流しているうちについ覚えてしまった。いろいろなものが無茶苦茶だったけど、わかりやすい時代だったかもしれないな。
・そんなところで、UARTのサンプルと見比べていたら、ピンのモード設定をペリフェラル用にするのを忘れていたのと、レジスタのプロテクション解除を忘れていた。コードを追加して試したら無事シリアルデータが出力された。あとは、入出力を割り込みを使うように変更することかな。



11月18日 ・さて、UARTを使うべく調べていく。UARTがたくさん入っているのだけど、とりあえず使われていいないピンを調べてポチポチとピンの初期化や、UARTのレジスタの初期化をコンストラクタに書いていく。一応C++なのでUART関連のデータやら関数をclassでカプセル化はしたけど、オブジェクトは1個しか生成しないのでそれほどご利益はないけどもね。
・さて、とりあえずできたので基板にUART用のピンを立てておこう。

11月17日 ・おっと、メインプログラムがC++ではなくCになっていた。プロジェクトを新規に作ったほうが良いのかな?と思ったけど、試しにそのまま.cを.cppに置き換えて中身をC++対応にちょっと書き換え。そうそう、割り込みはC関数だから、extern "C"が必要なんだな。これでビルドしたらうまくいった。
11月16日 ・さて、プロテクションのON/OFFを入れてみたけどやっぱり駄目。それならばと、LEDの一方を点灯のまま、もう一方をタスクで高速点滅させてみる。点滅しているLEDは少し暗くなるので、見比べればタスクが走っているのかわかる。これでタイマ割り込みが入るようなつもりにしてみると、最初は少し暗いLEDが点灯や消灯状態で消える。
・割り込みがはいったとたんに死んでるような感じだな。試しに自前のタイマ割り込み処理の中でLEDの消灯を入れて、割り込みが入ったらLEDが消えるようにしてみるけど、消えない。ということは割り込み処理に正しく飛んでいないということか。
・いろいろやったけど駄目なので、自前の割り込み処理関数の呼び方を変える。今まではプロジェクト生成時に自動作成された割り込み処理関数をコメントアウトして、同名の割り込み処理関数としていたのだけど、これを変更。自前の割り込み処理関数を通常の関数扱いにした上で、自動生成された側からサブルーチン的に呼ぶようにしてみる。
・これでビルドしなおしたら、ちゃんとLEDが消灯した。試しに点滅させてみたら、これもうまくいった。なるほど、割り込み処理関数としてうまく登録できていなかったということか。まぁ、とりあえず動いたからこれで良いとして、何が起きていたかの確認は後で暇があったらやっておこう。

11月15日 ・さて、タイマ割り込みをやってみよう。とりあえずボチボチとやってみたけど、案の定動いていない。あぁそうかレジスタのプロテクション機能があったんだっけ。もう一回調べ直そう
11月14日 ・昨日の続きでちょっと粘ってみる。一体何がおきているのかな。サンプルのビルド環境はどうも違うようで、インポートするのもうまくいかないようだけど、多分プロジェクトファイルらしきものにそれっぽい痕跡はあるのではないかということで、エディタで開いて探してみると、セクションのアドレス指定が見つかった。
・とりあえず比較してみるとちょっとおかしい。あれ?と思ったらベクタ領域のアドレスがおかしい。なるほど。自動生成したファイルでは未使用領域までベクタ領域を確保しているので先頭アドレスが変わってくるのだな。ここを修正。ついでにちょっと変更をくわえてビルドして書き込んだら無事動作。まずは大きい壁は突破か。
・そんなところで、知り合いから庭になっているという柿を3個もらった。1個食べてみたら外側はいいけど、芯の方は渋い。残り2個も同じだろうな。これは試しに干し柿にしてみよう。ヘタを大まかに撮った後皮を剥いて熱湯にくぐらせ、更に焼酎をふりかけておく。これを割り箸に刺して準備完了。以前干物を作るのに使った網の中に吊るしてみる。うまくできるかな?

11月13日 ・とりあえず、昨日借りてきたボードの書き込みテスト。これがなかなかの難儀。なんだかマニュアルもそのあたりはサラッとしていて、「それで、何をしたら良いの?」がよくわからない。
・いろいろやっていて分かったのは、専用のデバッグアダプタを使う方法、USB-UART変換アダプタを使う方法、USBに直結する方法の3通りがあるということ。とりあえずUSB直結が一番トラブルが少ないかということで試してみる。
・とりあえず書き込み用のプログラムを起動してみると、どうやら書き込みしようとしてはいるようだ。とりあえず、ボードメーカさんのサンプルを引っ張ってきて、生成されている.motファイルを指定してみたら書き込めて、それなりに動くことが確認できた。
・書き込みは出来たので、今度はIDEでビルド。とりあえずCPU型名を指定してサンプルのソースコードで上書きしてビルド。ビルドは成功したようなので書き込んでみる・・・と全然動かない。さて、どうしたものかな。

11月12日 ・打ち合わせ。とりあえず、話は進んだな。とりあえず評価ボードも借りられたのでこれを使ってちょっと動かしてみるか。
11月11日 ・ソースコードをボチボチと修正して移植していく。同じRXシリーズとはいっても、中のレジスタは随分違うものだな。元のプログラムが何をやっているのかを眺めながらもう一方をチェック。地道な作業だな。
11月10日 ・EclipseからGITが使えるということを知る。ちょっと試してみる。とりあえず使えるみたいだな。この際なので、先日削除してしまったWindows版のgitも再インストール。一応チェックしてみるとどちらからでもうまくいくようだ。
11月9日 ・ソースコードを読む。まだなんとなくモヤモヤしているな。とにかくデバイス自体のI/Oも機能も盛りだくさんなので、レジスタも引きずられるようにややこしくなっている。一回整理してみていかないとだめだな、こりゃ。
11月8日 ・「はーい榮太楼です♪」のCMで知られている榮太楼の工場で直売をやっているというのを知ってちょっと行ってみる。
・少し前に行ったのだけど、既に行列ができていた。順番待ちで入って行くと思ったより狭い中をぐるっと一周するシステム。
・普通に買えば結構なお値段のものが、賞味期限間際ということで格安価格。とりあえずいくつか買ってみて、少し食べてみた。なるほど美味しいけど、これを通常価格で買うかと言われたら・・・やはりご進物だな。

11月7日 ・打ち合わせ。道は覚えたのでナビは要らない。とりあえず、前向きに進んだので一安心。
・帰ってきてちょっと調べ物。ソースコードを読んだりして眺めているけど、とにかく全体像がつかみにくい。こういうのはしばらくやっていると霧が晴れるものなのだけどな。

11月6日 ・国税庁が軽減税率に関して、販売なら8%だけど、イートインなら10%だとか、コンビニでベンチが置いてある場合でも状況によって10%とするような、もはや混乱確実なことを始めているようだ。
・同じコンビニなのに、一方は休憩スペースがあるから10%、もう一方は無いから8%というのでは、休憩スペースなんて取り払ってしまえ!っていうことにもなるだろう。それが本当に良いことなのだろうか。コンビニは既に遠方まで買い物にいけないお年寄りの買い物の場としても利用されているのではないのかな?
・ほかでも、たとえば、ここのご近所のイオンモールではフードコートでの飲食可能な状態になっていて、スーパー部分で買ったものも食べていいとなっている。この場合スーパーで買っているのに10%になるのだろうか。とどのつまり何をしたいのかよくわからない。
だったら、少し離れた場所にフリースペースを営業している別会社があって、そこで飲食できるなんていう、なんだかパチンコの3店方式を彷彿とするようなことになったらどうするのだろう。
・だいたい、こういう「例外」を作る以上、「例外の例外」が生じるのは仕方ないことなのだ。それなら誰にでもわかりやすい、簡単なシステムにしたほうが良いに決まっている。たとえば、「食べる前に会計するなら8%、食べた後に会計するなら10%」とすればシンプルだ。
・食べた後に会計する蕎麦屋は10%なのに、自販機チケットで買えば8%なのかといった疑問はあるだろうけど、それはまさに「例外の例外」ということで良いんじゃないだろうか。立ち食い蕎麦の類なら8%という例外になるということは別段不自然でもないし、高級な店や派手目なお店では前会計なんてまずやらない(やれない)だろうから、10%になるのも不自然じゃない。
・「税金のために休憩場所を取り払う」なんていうことになるより、よほど「ユーザに優しい」システムじゃないのかな?

11月5日 ・とりあえず、英単語の本が一周した。付箋をつけていたらすごいことになったけど、結構覚えていたり、じっくり思い出しているとふと浮かんでくるものがあったりで、意外と長期記憶には入っているものなのだなと我ながら感心する。
11月4日 ・そんなところで、話だけ来て停滞しているところに「どうなりました?」メールを入れておく。とにかく次を考えないとな。

11月3日 ・別件でFatFSを。一応サンプルはHEWなプロジェクトなので、これをImportしてみる。ビルドするとお約束のエラー。メッセージがわかりにくいけど、どうやら"L"セクションのアドレスがオーバーフローしているということだ。
・Lセクションというのはどこにあるのだろうということでリンカマップを見てみるとなるほどメモリ空間の一番後ろの固定ベクタ領域の後ろになっている。これはつまり未定義だったので最後に回されたということなのだろう。
・新規プロジェクトで作成してビルドに成功していたもののマップと見比べると、なるほど新規作成の方ではLセクションがちゃんとW2セクションの後ろに置かれている。これはリンカオプションだなということで、見比べたらほら案の定。
・さて、これでうまくいったことはいったのだけど、ファイルを一つ開いたらまたエラーメッセージというのかバグ表示。なんでバグ表示しながらうまくビルドできたのかは不明だけど、内容は例によってuint8_tなどが未定義ということ。つまり、stdint.hが読み込めていないということだ。いい加減このエラーもうんざりなので、インクルードパス設定を、これまたうまく行っている新規プロジェクトの方から探す。と、コンパイラ=>ソースのところにあった、あった。${TCINSTALL}/includeだな。これを追加してみると、無事エラーが消えた。こういうことだったか。
・それにしてもインポートするというなら、このくらいサービスしてくれても良いんじゃないのかな。

11月2日 ・初期化部分が終わったのでテスト用のデータ入出力部分を読む。なるほど、2チャンネルのSPIをリング接続して、マスタのSPIコントローラから送ったデータをスレーブのSPIで受けて、データをエコーバックしてマスタに戻すという、ループテストだな。
・マスタの送信だけタスクでやって、スレーブの受信=>送信のエコーバックやマスタの受信は受信割り込みを使っている。
・さて、これを読んでいるとなんかおかしい。SPIなので、マスタが送信した時に読めるデータは「その時点でスレーブのシフトレジスタに入っていた値」のはずなので、1パケット分ずれるはずなのだけど、サンプルは送信した後、スレーブが応答して書き込んだデータが戻ってくると思っているようだ。
・SPIを1チャンネルだけ使って自己折り返しでエコーバックしていた時のサンプルをそのまま流用したのかな?
・問題はこれがなぜうまく動いてしまったのかということだけど、これもじきにわかってきた。このプログラムでは、マスタが0xA500からインクリメントデータを送って、最後に0xA300を送っている。スレーブは最上位ニブルの0xAを0xCにすり替えて送り返す。マスタは0xC5が読めれば下位8ビットのデータ(インクリメントデータ)をバッファに入れてバッファポインタをインクリメント、0xC3なら最終データとして格納した後バッファポインタを0に戻している。
ここで、最初と最後の下位8ビットがどちらも0x00になっていることがポイント。になる。電源ONの後の最初は0x0000なので、無効データとして飛ばされる。テストの二回目以降は最初に「前回の最終データ」が読めるので、バッファポインタは0のまま。2つ目のパケットは1回めのパケットがエコーバックされ、これが受信バッファの先頭に入るので、なんとなく辻褄があってしまう。もちろん、最終パケットデータはスレーブのバッファに入ったままになるけど、データ(下位8ビット)は0x00なので、マスタの受信バッファの初期値(最初にゼロクリアしている)と一致するので、一致してしまう。
・これのおかげで1バイトのズレが吸収されて、なんとなくまくいってしまうのだな。データを変更しながら、最終データをチェックサムとかCRCにしていたらエラーになったことだろう。実務なら大チョンボだけど、単なるサンプルだからまぁいいということだな。

11月1日 ・そんなところで、SPI絡みのRenesasさんのサンプルプロジェクトを読んでみる。結局わかりにくいので、例によって自分流にコメントを入れながら。まずは初期化部分だな。データシートと突き合わせながら読んでみるけど、レジスタの説明がとにかく探しにくい。これはやっぱりコンフィグレーションツールの類が無いと使ってられないだろうな。

前月 次月
エース