冬休みのしんちょく!~RX631へのプログラム準備~
こんにちは
年末年始の大掃除に忙殺されて反動により自堕落な日々を送るぱわぷろです
掃除してると不思議なものでね、時間が消えるんですね
発掘したマンガ読み返したり、出てきたボードゲームをプレイしたり、ゴルフクラブや木刀振り回してみたりすると…冬休みの終わりが見えてきちゃうんですね
ってなわけで少しは進捗を出さないとマズいと思い、これを書いた次第です、はい
今回はRX631にuart通信でのprint関数、データフラッシュ、PDGでIOピンを使いやすくするための一工夫ヘッダの移植に関する備忘録です
UART通信関連の移植
今回の移植関連ではあまり問題無かった部分なので主に解読について書きます
黄色線で引かれているのがC言語の標準ライブラリの一つで可変長引数を使用可能となるライブラリらしい(注, 筆者のプログラムミング能力は低いです)
可変長引数とは引数の型が指定されていないってことで万事受けできる引数の形…なのかな?まぁその程度の理解で止めておこう
ここからが本文
char型と可変長引数が引数
va_listは可変長引数の型、のようなものでva_startで初期化させる
vsprintfは可変長引数を変換して文字配列strに保存させる
va_endは可変長引数の取り扱いをやめる合図?RAMを結構食うからとかなのかな?
最後のはPDG関数でstrを送るやつですね
コイツの問題はプロジェクト設定で標準ライブラリの使用を制限してあることでした
プロパティからC/C++ ビルド => Settings => Standard Library => 内容
で標準ライブラリの使用の有無が決められます
これができればオッケー
後々math.hとか使うかもしれないから覚えとこ、そうしよう
データフラッシュ使用
ソースコードは先輩から直にもらったものなので控えさせていただきます
とゆーか先輩のブログに乗ってるから見てください
RX631でもほぼ同じでした
正直、特に問題は無かったんですがね…
…プロジェクトのマイコン機種設定はしっかりやりましょうね!
どうやらプロジェクト設定の段階でRX631ではなくRX610を選択していたらしい…
— ぱわぷろ@工房 (@ss_sholaw) 2018年1月7日
何やってんだ1ヶ月前の俺…
IO入出力関数の準備
PDG使っててこれが一番厄介
前にもPDGを紹介したときに書いた気がしますがその詳細ということで笑
で、厄介な理由はですね…
PDGのIO入出力関数はピンごとに関数名が違う
これすごく面倒くさいんですよね
単純なIO出力とかだったら同一の関数で引数だけ変えて運用すればデバッグとか楽なのにって思うんですけどね……(俺だけ?)
そんなわけで同一関数で出力できるようにしようってわけですね
まずPDG内部の関数を見るとですね、PA0の出力関数の内部はこうなってるんですね!
冗長、ハッキリ言って冗長
これだったら中身の関数だけ使えるようにすればええやん
だけど引数の名前なげーな…ってなったのでこのマクロ探し当てました
PDGが内部で作成しているヘッダ、r_pdl_io_port.hにこの部分のマクロがあるんですね
この部分のマクロは変更しない方がいいです
PDG関数は内部処理でこのマクロを使っており、これらを置換等で書き換えてもどこかでミスするのでいじらない方が得策です
自分はこれらのマクロ部分を自分で作ったヘッダにコピペして、名称をもっとシンプルに変更しました(ex. PDL_IO_PORT_3_0 => P30)
ここまでやれば準備はOK…ってわけでもないです
実際に内部の関数を使うソースファイルには読み込まなきゃいけないヘッダがいくつかあります
とりあえずこれ入れると関数は使えます
一番上は自分のプロジェクト名でヘッダファイル名が変わりますのでPDGのマニュアル読んでください
以上で冬休みのしんちょく!は終わりです
実際には1608の部品使おうとか、はんだの選定、モータの発注終了など細々とあったのですが技術的なモノはこんな感じです
こんなの一日で終わるとか言わないで
これからテスト始まったりするし今月は忙しいかな…
でも回路テストや足回り部品の注文、モータマウント設計とか並行してちょびちょび進ませたいです
二月中に基板発注までできれば電通大ロボコンに基板出走できるかも(願望)
とりあえず春休み中に更新するつもりです
では、またの機会に