Previous: 13.2.3. フラッシュへの書き込み |
Up: 13. フラッシュメモリプログラミング |
Next: |
サンプルプログラム |
flash_memorize_message |
先述のEEPROMにメッセージを書き込むプログラムと同様の手順で、フラッシュメモリに、ユーザが入力したメッセージを記録するプログラムです。リセット後、リセット前に入力したメッセージが表示されます。DFUを利用している場合には前項と同じく書き換えが必要です。
サンプルプログラムを実行すると、メッセージの入力を求められ、入力すると書き込みが始まります。ここでは「Enjoy Flash Programming with STM32!」と入力しました。
Hellow Cortex-M3/STM32 World! Expand your creativity and enjoy making.
No message found. It looks it is the first time to run this progra m. Type what you want to memorize in Backup registers. Maximum number to type in is :2046 Enjoy Flash Programming with STM32! What you type is Enjoy Flash Programming with STM32! Unlocking Flash. Clearing pending flags. Erasing Flash Pages. Writing Magic word to Flash. Writing your message to Flash. .................................................................. .................................................................. .................................................................. .................................................................. .................................................................. .................................................................. .................................................................. .................................................. Writing finished. |
リセットすると、先ほど入力したメッセージが表示されます。
Hellow Cortex-M3/STM32 World! Expand your creativity and enjoy making.
Message found. The message stored in flash is Enjoy Flash Programming with STM32! Type what you want to memorize in Backup registers. Maximum number to type in is :2046 |
フラッシュメモリプログラミング部分の手順は前項のサンプルと同じです。このサンプルプログラムのポイントとしては、まず、以前にこのプログラムが実行されたことがあるかどうかを、以下のようにして、メモリ上に記録された特定のキーワードの有無を参照することによって行っています。
if (*(uint32_t*)(FlashBaseAddr + (StartPage * FLASH_PAGE_SIZE)) == MAGIC_WORD) ? { ??? cprintf("Message found. The message stored in flash is \r\n"); ??? cprintf((int8_t*)(FlashBaseAddr + (StartPage * FLASH_PAGE_SIZE)) + 4); ??? cprintf("\r\n"); ? } |
もう一つのポイントですが、フラッシュへの書き込みはワード単位なのですが、アスキー文字のメッセージはバイト単位です。そこで書き込みの際には、以下のように4文字ずつ、1ワードにまとめて書き込みを行っています。
FLASHStatus = ? FLASH_ProgramWord(FlashBaseAddr + (StartPage * FLASH_PAGE_SIZE) + Address + 4, ????? (RxBuffer[Address + 0] <<? 0 ) + ????? (RxBuffer[Address + 1] <<? 8 ) + ????? (RxBuffer[Address + 2] << 16 ) + ????? (RxBuffer[Address + 3] << 24 ) ); |
ブックガイド 27 他のマイコン
初めてマイコンのことを学ぶ際には、まずは一つのマイコンを徹底して学ぶのがよいと思います。もっとも他のマイコンを知ることで自分が学んでいるマイコンに対する理解がより進むということもあります。国産のマイコンやArduinoには、よい解説書がたくさん出版されています。視点を広げるという意味でも一度目を通してみるとよいでしょう。
Massimo Banzi;『Arduinoをはじめよう』,オライリージャパン,2009年3月. Tom Igoe;『Making Things Talk Arduinoで作る会話するモノたち』,オライリージャパン,2008年11月. GainerBook Labo他;『+GAINER』,オーム社,2008年10月. 布留川英一;『はじめてのGainerプログラミングガイド』,工学社,2008年5月. 佐藤佳恭;『超低コストインターネット・ガジェット設計 USB・μIP・microSDプロトコールスタックの活用』,オーム社,2008年5月. 山根彰;『AVRマイコン・リファレンス・ブック』,CQ出版社,2006年4月. 土井滋貴;『試しながら学ぶAVR入門』,CQ出版社,2008年5月. 松原拓也;『AVRマイコン活用ブック』,電波新聞社,2007年2月. 横田一弘;『C言語によるH8マイコン制御』,東京電気大学出版局,2005年4月. 今野金顕;『マイコン技術教科書 H8編』,CQ出版社,2002年6月. 山崎尊永;『今すぐ使える!H8マイコン基板』,CQ出版社,2010年4月. 藤沢雪穂;『H8マイコン完全マニュアル』,オーム社,2000年12月. 熊谷あき他;『Interface増刊 SH-2マイコンで学ぶ組み込み開発入門』,CQ出版社,2009年3月. 横山直隆;『C言語によるSH?2マイコンプログラミング入門』,技術評論社,2008年1月. 鹿取祐二;『SuperHファミリのCプログラミング』,オーム社,2008年9月. 内藤竜治;『USBマイコンでパソコンI/O! 78KO基板付き』,CQ出版社,2009年8月. 桑野雅彦;『はじめての78Kマイコン』,CQ出版社,2006年7月. 桑野雅彦他;『PSoCマイコン・スタートアップ PSoC基板&書き込み器付き』,CQ出版社,2009年12月. 石丸善行他;『R8C/Tinyマイコン・リファレンス・ブック』,CQ出版社,2005年10月. 鈴木美朗志;『わかるマイコン電子工作 PIC&C言語でつくる赤外線リモコン』,電波新聞社,2007年9月. |
ブックガイド 28 更なるレベルアップのために
Peter van der Linden;『エキスパートCプログラミング 知られざるCの深層』,アスキー出版局,1996年4月. これが読めるようになると実力が付いてきた証拠だと思います。ちなみに筆者はまだ読みこなせていません。
ヘンリー・S・ウォーレン他;『ハッカーのたのしみ 本物のプログラマはいかにして問題を解くか』,エスアイビー・アクセス,2004年9月. 頭のいい人がコードを書くとこうなるのかと感心させられます。読んでいると脳みそから汗が出そうになります。
Ozy;『Short Coding 職人達の技法』,毎日コミュニケーションズ,2007年8月. いかにして短く書くかという職人芸の解説です。このスタイルを習得するというよりも、C言語の柔軟さを知る素材として読むのが面白いでしょう。
ジェイムズ・ノーブル他;『省メモリプログラミング メモリ制限のあるシステムのためのソフトウェアパターン集』,ピアソン・エディケーション,2002年6月. どちらかというとPC向けの本ですが、メモリの節約はマイコンだけの問題ではないということで、視点を広げるために読んでみるとよいと思います。
ジョン・ベントリー;『珠玉のプログラミング』,ピアソン・エディケーション,2000年10月. プログラムの論理構造の本質的な部分をきちんと理解してアルゴリズムを構築し、ソフトを書きたい人のための本です。 |
Previous: 13.2.3. フラッシュへの書き込み |
Up: 13. フラッシュメモリプログラミング |
Next: |