[管理者用]

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

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

前月
エース