多摩電動飛行機研究会掲示板


| トップに戻る | 検索 | アルバム | 管理用 | ▼掲示板作るならRara掲示板 |

MinimOSDのコードをArduino1.7でコンパイルする時の変更点
投稿日:2016年02月21日 18:23 No.1546
今日は朝練に行くつもりが(寝坊で)行けなかったので、気を取り直してMimimOSDをCC3Dで使うための準備をしました。
KOさんの書き込みなどを参考にさせていただいて、コールサインを表示するところをゴールに格闘しています。
ただ、何もかもが初めてなので、まずは
1. ArduCAM_OSDからソースコードを取得(https://code.google.com/archive/p/arducam-osd/
2. 手元のPCでビルド
3. ボードに書き込み
を何も手を加えずに通ることを確認しようとしました。
そうしたところ、コンパイルエラーが出ましたが、とりあえず修正してボードへの書き込みは成功したので共有させていただきます。
■問題点
error: 'prog_char' does not name a type が出てビルドエラーになる。
■原因
Arduino1.7.7でコンパイルしたが、1.7.7ではprog_charの型定義がない。
■対処
ソースコードからprog_charを全検索して、prog_char → charに変更。

prog_charの型定義がいつなくなったのか、この対処方法が本当に正解なのか確認できていませんが、一先ず報告させていただきます。
もし、この辺りに詳しい方がおられましたら補足、ご指摘などいただけると嬉しいです。

次は、UAVtalkのコード取り込み、コールサインの表示対応、、、です。


Re: MinimOSDのコードをArduino1.7でコンパイルする時の変更点 KO 投稿日:2016年02月21日 21:33 No.1547
請さん、こんばんは

私が最初に最新版のArduino環境で試したときはFastSerial.hのincludeで問題が発生していました。
原因は分かっているのですがArduino.hを書き換える以外、解決方法を思いつかなかったので、そのような変更をしなくてもビルドが通るバージョンを探し、最終的に1.0.6を使っています。
もし最新の環境でビルドを通す方法が有るのであれば、教えて頂けると助かります。

prog_charの件ですが、1.0.6ではavr/pgmspace.hに以下のように定義されています。

typedef char PROGMEM prog_char;

これが無くなっていると言う事は、最新のArduino環境では「char PROGMEM 変数名」のように変数を宣言できないのかも知れないですね。

PROGMEMを付けて変数を宣言すると、その変数はSRAMではなくFlashメモリに配置されます。
これをcharで置き換えると、prog_char型で宣言されていた変数が全てRAMに作られて空き容量が不足してしまいそうです。
RAMの空き容量は大丈夫でしょうか?

https://goo.gl/nSJmjL

「prog_char 変数名」で宣言されている変数を「char 変数名 PROGMEM」で宣言するように置き換えれば、同様の効果を得られそうに思います。


Re: MinimOSDのコードをArduino1.7でコンパイルする時の変更点  投稿日:2016年02月22日 23:06 No.1556
KOさん、こんばんは。
コメントありがとうございます。また、自分が色々と理解できていないところがあるなあ、と痛感しております。
一先ず、コンパイルと通した環境について少し詳しく書きます。
■環境
・Windows10(64bit)
・Arduino IDE 1.7.7
■ソースコードDL元
https://storage.googleapis.com/google-code-archive-source/v2/code.google.com/arducam-osd/source-archive.zip
■ソースコード修正内容
以下のファイル内の"prog_char"を機械的に"char"に変更。
libraries\AP_Common\AP_Common.h
libraries\AP_Common\AP_Param.cpp
libraries\AP_Common\menu.cpp
libraries\FastSerial\BetterStream.cpp
libraries\FastSerial\BetterStream.h
libraries\FastSerial\vprintf.cpp
■参考情報
以下のブログ記事からの情報を基に今回の修正をしてみた次第です。
http://memo.tank.jp/archives/6234

C言語的な手直しは理解できる(と言っても最近使っていないので思い出しながら)のですが、ハードウェアを意識したプログラミングをやった経験がないので、PROGMEMなどの型定義についても今回初めて遭遇して調べ始めた次第です。
今回コンパイルが通るような修正はできましたが、ハードウェア的に見て適切な方法だったか、というと今の自分では判断すら難しいですね。
何とか勉強して追いつけるようにします。Arduino関連の本で何かお勧めがあればご紹介いただけませんか?

それと、この件もKOさんが作っていただいたFacebookのグループの方で進めた方がよさそうですね。


Re: MinimOSDのコードをArduino1.7でコンパイルする時の変更点  投稿日:2016年02月22日 23:32 No.1557
補足です。
先ほどのコンパイル環境の件、Arduino IDE 1.7.7で行いましたが、1.7.8でもボード書き込みまでできました。


Re: MinimOSDのコードをArduino1.7でコンパイルする時の変更点 KO 投稿日:2016年02月23日 00:51 No.1558
請さん、こんばんは
私もマイコンを本格的に始めたのは最近なので、あまり詳しくないのです^^;
Unoは2年前位に買って持っていましたが、ある程度の物を作ったら満足して仕舞い込んでいました。
最近はjavaとかc#なので、c言語いじるのも18年ぶりでした。

このArduino環境の件、私も興味があるのでFacebookの方にも貼り付けておいて頂けると助かります。




お名前
メール
タイトル
URL
画像添付


削除キー ( 記事を削除する際に使用 )
文字色