2015年01月28日

NUCLEO-F411RE ボードでシンプル・マルチタスク・スケジューラ

NUCLEO-F411RE ボードでシンプル・マルチタスク・スケジューラ
* はじまり
STM32CubeF4ドライバが最新版(V1.4.0)になったので、
勉強のため、このHALドライバを使ってベタで書いてみた。

STM32CubeF4
http://www.st.com/web/en/catalog/tools/PF259243

勉強内容: :D
(1) シンプル・マルチタスクスケジューラを動かしてみる。
    ここら辺と同じ。
    STM32F0 Discovery: シンプル・スケジューラ
    ARM: Cortex-M3/M0: シンプル・スケジューラ
(2) UARTの設定と送受信の動作。
    115200bps
(3) ChaNさんのxprintfで文字列出力。
(4) FPUを使う設定の確認。
(5) Makefileを使ってスタートアップコードからコンパイルと
    動作確認。
(6) システムクロック周りの確認。
(7) 最新のSTM32CubeF4 HALドライバの構成、動作確認。
(8) GPIOでLEDを点灯。
(9) Newlib nano で浮動小数ありなしオプションで且つ、ハードFPU有効な動作。
(10) 標準のNewlibで以下同上。
(11) syscalls.cでリターゲットの確認。

(注) xprintf()以外のprintf()を使う時は、タスクのスタック容量を5000byte以上に
    設定しないと動かない。

* 使用ボード
NUCLEO-F411RE
http://developer.mbed.org/platforms/ST-Nucleo-F411RE/
システムクロック(内蔵クロックベース)とSRAM容量を NUCLEO-F401REレベルに設定
(Systemclock=84MHz, SRAM=96KByte)
したので、NUCLEO-F401REでも動作する可能性があるけど、
持ってないので不明。:D

* コンパイル
コマンドライン:
    MinGW/MSysコンソール
    Cygwinコンソール
    Linuxコンソール
のどれかの環境。
コンパイラ:
    ARM gcc
    https://launchpad.net/gcc-arm-embedded
    arm-none-eabi-gcc.exeに実行パスを通しておいてください。
    v4.8.4で動作確認。

コンパイル方法:
Makefileがあるトップフォルダで「make 一発」。 xD
実際には「make -j4」とかが現実的。

* 動作確認
*.binファイルをNUCLEO-F411REボード用に見えるドライブにコピーするだけ。
(mbedと同じやり方)
*.hexをSTLINK経由で書き込んでも良い。
UARTターミナルに1から9の数字を打てば、LEDホアンホアン xD 速度が変わる。

* Download
v02:
    タスク・スタックを200バイトに増量
    nucleo-f411re-scheduler-2015-01-v02.7z
v01:
    nucleo-f411re-scheduler-2015-01.7z
    な、なんと gcc-arm-embedded の最新gcc v4.9.3だと動かない! xD。
    え"?!
    調べるか。 orz
    orz
    原因判明。
    タスク用のスタックをケチり過ぎた。
    200バイトでOK.


* ハマリポイント :D
HALドライバの作法に慣れていないのもあるけど、
UARTの割込み送受信が分りにくくて動くまでorzだった。
キーワードは以下。
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
void USART2_IRQHandler(void) {
    HAL_UART_IRQHandler(&huart2);       
}
HAL_UART_Transmit_IT( &huart2, &c, 1); 
HAL_UART_Receive_IT( &huart2, &rcvData, 1); 
Web検索しても分りにくくて結構困ってる人多いみたい。 スケジューラのUART部分は、あくまで自分用のデモなので、xD 実際にはリングバッファ等を使うのがいいと思う。


posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | ARM系 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。