LPC2388向けのデモを整備しました
5月の末、STM32F207V/ZGT6を夢中でいじっていた折に、がた老氏からLPC2388向けの
プログラム、とくに割り込み動作について質問をいただきました。
LPC2388については、TFT液晶表示プログラムだけは更新を続けていてそのほかは去年
の1月以来放置状態でしたので、動作チェックがてら更新してみようかとおもっていたら
おもいくそはまったので顛末を記録しておくことにします。
起:Thumbモードで割り込みが動かなくなっていたことに気づいた
まずおかしいと気づいたのがこれで、FreeRTOSとは関係なしに最新のCodesourceryG++
ではThumbモードでコンパイルした場合、ユーザーモードから割り込み許可するために
SWIかましたら先に進まなくなっていたことが判明。ARMモードでビルドしたり動作確認
した1年くらい前のCodesourceryG++のVerでは正しく動いていたのでこのときはコンパ
イラのバグかとおもって放置していました・・・。
承:FreeRTOSのデモもうごかなくなっ(ry
がた老氏はFreeRTOSからRTC(と割り込み)を動かすこと画策されていて、私の公開
していたFreeRTOSV6.0.1向けのデモとBare-Metalなprintfのプログラムを参考にされ
ていました。しかしビルドが通らなかったとのことで、どのファイルをインクルードもしく
は定義すべきかを伝えて私もちょっくら確認しますかとおもって最新のCodesourceryG++
を使用しARMモードでビルドして書き込んでみるとなんと動かなかった・・・。
そもそも公開した当初は「とりあえずこれなら動く」状態だったため、Keilのデモや
Marthin'thomas氏やChan氏のプログラムやらが全部まぜこぜになっていて一年放置
後の私が見ても何がどうなってるのかよく分からない代物になっていました。
実はほかの方からもちらほらそういう質問いただいていたのですが、これはまずいと
思い立ちこの時点でやっとこ大規模な回収改修をすることにしました。
転:スタック領域のアラインメントを8バイトずつにあわせる
動いていたころのVerは"Sourcery G++ Lite 2009q3-68"でしたが20110630時点で手に
入る最新のものは"Sourcery G++ Lite 2011.03-42"です。このVerはGCC4.5.2になって
いてLinkTimeOptimizationというリンク時に最適化を行う機能が利用可能となっています。
また。どちらもABI(Application Binary Interface)はEABI(Embedded ABI)となっていますが・・・。
よくよく調べてみるとEABIはスタック領域のアラインメントを8バイトにそろえるべし。
と記述されていました。audin氏もこの件について触れています。さらにFreeRTOSの
フォーラムにもこの件についてのやり取りがありました。
(audin氏は.ARM.exidxと.eh_frameにも触れられていましたがそちらは幸い回避済でした。)
私のリンカスクリプトを調べてみると.stackがalign(4)になっていました。あらら。
てわけでこちらは修正。
この時点でARMモードでFreeRTOSのLED点滅のみの簡単なプログラムは動くようになりま
したが、FreeRTOS上で割り込みがいまだ動かない・・・。
結1:FreeRTOS上においての割り込みを正しく記述する
Sourcery G++ Lite 2009q3-68では割り込みまわりは結構いい加減でも問題な
かったのですが、Sourcery G++ Lite 2011.03-42だと以下のようにしないといきなり動かな
かったり、また動いてるように見えても10sec程度で止まったりでまともに機能しません。
↑UART0を例にとるとUART0の割り込みハンドラのwrapperを作り
割り込みがかかるとまずwrapperに飛ぶようにします。
↑UART0のヘッダファイル内で上記画像のように定義してやる必要があるみたいです。
がた老氏は最終的に自力で上記の解決方法を見つけられたようで、私ももう少し調べて
から的確な返事をすべきだったと反省してます。同じくおきばやリンク張ってるけど
放置状態のものも最新のコンパイラでビルド/動作できるようにしておくかもしくはばっ
さり削除することをしないと後に続く人を混乱させて無駄な時間を喰わせてしまうことに
なってしまうのでこれから先はこまめに対処していきますね。
結2:Thumbモードでふたたび割り込みをうごかす
"Sourcery G++ Lite 2009q3-68"では問題なかったので気づかなかったのですが、本来な
らばタイマやUART等の割り込みのハンドラがあるCのファイルは必ずARMモードでコン
パイルすべきだそうで、それを守ってmakefile内でARMモードでコンパイルするファイルを
明示してやるだけでよかった。・・・はずでしたが-fltoのオプション効かせてるとやっぱり
エラー吐いてビルドがとまったりビルドできても動かなかったりでmakefile内でThumb
モードを指定している時は-fltoのオプションを除外するようにしました。これで"Sourcery
G++ Lite 2011.03-42"でビルドしても大丈夫となりましためでたしめでたし。
ていうか自分で注意書きかいててすっかり忘れていましたorz
結3:ほかのLPC2388向けのプログラムもレストアする
て言うわけでコンパイラじゃなくてねむいさんが悪いのが分かったので最低限おきばで
公開してるのは最新化しておきました。
特にLPCUSBを使用したMassStorageClassはChan氏のMCIドライバを連結し転送速度
UPに成功しました!
58MByteのファイルを読み出し
58MByteのファイルを書き込み
以前は0.1MB/s、がんばっても0.2MB/sくらいだったのですが書き込み0.4MB/s、
読み出し0.5MB/sに!さらにArai氏のLPC1768向けLPCUSBの改修例を参考に最大4GByte
までしか認識できなかった容量も私の手持ちのSDカードで最大容量16GByteのものが認識
できるようになりました。
STM32Primer2のデモも同じような理由で最大4GB制限があり、今回対処法が分かったので
修正しました。
連絡・質問・免責は↑のリンクを
↓SNSもやってます↓
powered by まめわざ- ARM/STM32 (102)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (11)
- FPGA (4)
- GPS/GNSS (18)
- MISC (73)
- STM8 (1)
- Wirelessなアレ (16)
- ブラウザベンチマーク (28)
- 日本の自然歩道 (23)
- 中国自然歩道を往く -北伐!県境を越えて鳥取県に侵入せよ!-
⇒ ねむい (12/23) - 中国自然歩道を往く -北伐!県境を越えて鳥取県に侵入せよ!-
⇒ ひかわ (12/18) - 中国自然歩道を往く -北伐!県境を越えて鳥取県に侵入せよ!-
⇒ ひかわ (12/18) - いろいろ試す51
⇒ ねむい (06/26) - いろいろ試す51
⇒ ひかわ (06/10) - STM32G0使ってみる4 -1wireデバイスをいろいろ使ってみる-
⇒ ねむい (12/14) - STM32G0使ってみる4 -1wireデバイスをいろいろ使ってみる-
⇒ ひかわ (12/05) - 大緊急事案!!!1!Raspberry Pi Picoはぢめました!!1!!1
⇒ 竹本浩 (08/14) - 大緊急事案!!!1!Raspberry Pi Picoはぢめました!!1!!1
⇒ ねむい (08/12) - 大緊急事案!!!1!Raspberry Pi Picoはぢめました!!1!!1
⇒ 竹本浩 (08/08)
- March 2023 (1)
- February 2023 (1)
- January 2023 (1)
- December 2022 (2)
- November 2022 (1)
- October 2022 (1)
- September 2022 (1)
- August 2022 (1)
- July 2022 (1)
- June 2022 (1)
- May 2022 (1)
- April 2022 (1)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- December 2021 (2)
- November 2021 (2)
- October 2021 (1)
- September 2021 (1)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- April 2021 (1)
- March 2021 (1)
- February 2021 (1)
- January 2021 (1)
- December 2020 (3)
- November 2020 (1)
- October 2020 (1)
- September 2020 (1)
- August 2020 (1)
- July 2020 (1)
- June 2020 (2)
- May 2020 (1)
- April 2020 (1)
- March 2020 (1)
- February 2020 (1)
- January 2020 (1)
- December 2019 (3)
- November 2019 (1)
- October 2019 (1)
- September 2019 (2)
- August 2019 (1)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (1)
- March 2019 (1)
- February 2019 (1)
- January 2019 (1)
- December 2018 (3)
- November 2018 (2)
- October 2018 (1)
- September 2018 (1)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (1)
- April 2018 (2)
- March 2018 (1)
- February 2018 (1)
- January 2018 (1)
- December 2017 (2)
- November 2017 (2)
- October 2017 (1)
- September 2017 (1)
- August 2017 (1)
- July 2017 (1)
- June 2017 (1)
- May 2017 (1)
- April 2017 (1)
- March 2017 (2)
- February 2017 (2)
- January 2017 (2)
- December 2016 (7)
- November 2016 (2)
- October 2016 (2)
- September 2016 (1)
- August 2016 (1)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (1)
- March 2016 (2)
- February 2016 (1)
- January 2016 (1)
- December 2015 (3)
- November 2015 (1)
- October 2015 (3)
- September 2015 (2)
- August 2015 (2)
- July 2015 (3)
- June 2015 (3)
- May 2015 (4)
- April 2015 (2)
- March 2015 (4)
- February 2015 (1)
- January 2015 (3)
- December 2014 (3)
- November 2014 (2)
- October 2014 (1)
- September 2014 (2)
- August 2014 (2)
- July 2014 (3)
- June 2014 (2)
- May 2014 (1)
- April 2014 (1)
- March 2014 (4)
- February 2014 (4)
- January 2014 (3)
- December 2013 (5)
- November 2013 (4)
- October 2013 (3)
- September 2013 (2)
- August 2013 (2)
- July 2013 (2)
- June 2013 (3)
- May 2013 (2)
- April 2013 (2)
- March 2013 (2)
- February 2013 (2)
- January 2013 (3)
- December 2012 (4)
- November 2012 (2)
- October 2012 (2)
- September 2012 (4)
- August 2012 (1)
- July 2012 (3)
- June 2012 (2)
- May 2012 (3)
- April 2012 (3)
- March 2012 (2)
- February 2012 (3)
- January 2012 (3)
- December 2011 (5)
- November 2011 (3)
- October 2011 (2)
- September 2011 (2)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (3)
- December 2010 (7)
- November 2010 (1)
- October 2010 (1)
- September 2010 (1)
- August 2010 (3)
- July 2010 (4)
- May 2010 (1)
- April 2010 (2)
- March 2010 (2)
- February 2010 (2)
- January 2010 (3)
- December 2009 (3)
- November 2009 (8)
- October 2009 (7)
- September 2009 (5)
- August 2009 (4)
- July 2009 (6)
- June 2009 (7)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.
Comments
Post a Comment