TOPPERS/ASP STM32F4バージョンが発表された様だ。
https://www.toppers.jp/asp-d-download.html#arm_m4
まだ,発見したばかりなので詳細は不明なものの,
上のページを見ると,
STM32F4-Discovery
Nucleo-F401RE
STM32F429ボード
に対応している様だ。
所有しているNucleo-F411REはF401REとして動作するので試してみようかな。
FPU対応はどうなのかよく分からない。
(ドキュメントに対応済みと書いてありました)
以下 READMEから抜粋。
TOPPERS/ASP Kernel(Release 1.9.2)STM32F4
Toyohashi Open Platform for Embedded Real-Time Systems/
Advanced Standard Profile Kernel
TOPPERS/ASP STM32F4は以下の4つのボードのGCCの開発環境に対応します.
本パッケージは個別パッケージであるため、TOPPERS/ASPカーネルターゲット
非依存部パッケージasp-1.9.2.tar.gzと組み合わせて使用してください.
(1)STM社 STM32F4 Discoveryボード
Chip:STM32F407VGT6
(2)Olimex社STM32-E407ボード
Chip:STM32F407ZGT6
(3)日昇テクノロジ社のstm32f429ボード
Chip:STM32F429
(4)STM社STM32F401 Nucleoボード
Chip:STM32F401RET6
ASPの実行形態は以下の2つをサポートします.
実行形態は、コンパイル時の変数DBGENVの設定で変更ができます.
Makefileの設定で変更ができます.
(1)RAM実行:ROMモニタ(rommon)で起動したボードに、UARTを用いて
ASPの実行形式(srec)をダウンロードして実行する形態
rommonのFLASH ROM書込みファイルはtools/rommonに置いてあります.
DBGENVが設定されない場合、またはRAMが設定の場合、この形態のビルドを行います.
(2)ROM実行:FLASH ROMに書き込んで実行する形態
DBGENVにROMが設定の場合、この形態のビルドを行います.
STM社STM32F401 Nucleoボードに関しては、TrueSTUDIOのプロジェクトファイルを
tools/TrueSTUDIOに用意しています.
これにより、直接TrueSTUDIOを用いてビルドが可能です.
実行形態はROM実行に固定です.
* TOPPERS ASP Arduino M0 Proバージョン
話変わって。
http://dev.toppers.jp/trac_user/contrib/wiki/rtos_arduino
Arduinoのライブラリが使えるTOPPERS/ASPだそうです。
これは興味深い。
でもArduino M0 Pro持ってる人はそんなに多くない気もする。
持ってないし。:D
2016年01月18日
2014年02月15日
簡単! TOPPERS/SSP:トラ技付録 LPC11U35基板でLEDチカチカする
と、いうことで、ここまでの経緯は、ここ、 TOPPERS/SSP/ASP: 移植メモ ポータル で、 TOPPERS/SSPを使ってトラ技付録LPC11U35基板でLEDチカチカしてみました。 http://toragi.cqpub.co.jp/tabid/707/Default.aspx この基板とUSBケーブルさえあれば、全部無料のツールを使って、 RTOSで簡単にLEDチカチカを動かすことができます。:D (LPC-Link2や、この基板がもう一枚あればデバッグもできちゃいます)
上の写真は、LPC11U35基板をもう一枚のLPC11U35基板でLPCXpressoを使って CMSIS-DAP経由でデバッグしているところ。 いつも「sample」フォルダのsample1を使うのもアレなので、 独自フォルダを作ってゼロからプロジェクトファイルを作ってみました。 (1)「sample_led」フォルダを「sample」フォルダと並列な場所に追加しました。 (2) その中にLEDチカチカ用ファイル群を入れます。 led_blink.c led_blink.h led_blink.cfg Makefile (下記のダウンロードファイルの中に含まれています) プロジェクトをコンパイル: トップフォルダ下(arc,cfg,doc,...フォルダがあるフォルダ)で、
mkdir build cd build ../configure -T cq_lpc11u35_gcc -A led_blink -t ../sample_led make depend make
(注2) でコンパイル終了です。( コンパイルの方法は以前の話も参照して下さい) * ssp.binファイルをFlashに書き込む方法 buildフォルダにできた、ssp.binファイルをLPC11U35基板に書き込む前に、 「ssp.bin」ファイルにベクタチェックサムを書込みます。 buildフォルダ下で、checksum.exe ssp.binを実行します。 その後、ssp.binを書き込めば2個のLEDが別周期でチカチカします。 (^^)/ (checksumの詳細は、http://mpu.seesaa.net/article/399685675.html#write_bin_toc 参照) * LPCOpenライブラリを内包した 現時点(2014/02)で最新のLPCOpenライブラリベースでポーティングしたので、 便利なペリフェラル・ライブラリが即座に使えます。 http://www.nxp-lpc.com/lpc_software/lpcopen/ * ROM/RAMサイズ 使用したARM CコンパイラはLaunchpadの以下のバージョンです。 gcc version 4.8.x https://launchpad.net/gcc-arm-embedded また、LPCXpressoのv6.1.4付属のgccでもOKです。 上のled_blinkプログラムは、以下の様になりました。text data bss dec hex filename 5840 0 1716 7556 1d84 ssp* 標準sampleプログラム デフォルトのsample1も動きます。buildフォルダで以下の様にコンパイルしたあと 上記と同様にマイコンに書き込みます。rm * ../configure -T cq_lpc11u35_gcc make depend makeコンパイル結果、text data bss dec hex filename 10752 8 1784 12544 3100 sspこのデモは、LPC11U35ボード上のUSART端子を使います。 P0_19: TX P0_18: RX ボーレートは115200bpsです。 USB-UART変換器などでパソコンにつないで、TeraTermなどを開いておきます。 ボード上のリセット・ボタンを押せば、最初からスタートします。 動作は、ここと同一です。TOPPERS/SSP Kernel 1.2.0 with CQ-LPC11U35 (LPC11U35) 2014/02 ported by dinau Copyright (C) 2010 by Meika Sugimoto Copyright (C) 2010 by Naoki Saito Nagoya Municipal Industrial Research Institute, JAPAN Sample program starts. #act_tsk(2) task3 is running (001). * task3 is running (002). * task3 is running (003). * task3 is running (004). * task3 is running (005). * task3 is running (006). * task3 is running (007). * task3 is running (008). * task3 is running (009). * #act_tsk(0) task1 is running (010). | task1 is running (011). | task1 is running (012). | task1 is running (013). | task1 is running (014). | task1 is running (015). |* Download ここに移動しました 上でコンパイルした「sample1.bin」と「led_blink.bin」をダウンロードしたファイルの target/cq_lpc11u35_gcc/binhex/ フォルダに添付したので、これらをFlashに書くだけで、 すぐに、動作確認ができます。 * LPCXpresso IDE + CMSIS-DAPやLPC-Link2でデバッグする 前提として、arm-none-eabi-gccに実行パスが通っていることが必要です。 例えば、 D:\LPCXpresso_6.1.4_194\lpcxpresso\tools\bin に通しておきます。(Launchpad gccにパスが通っていれば不要) CMSIS-DAPやLPC-Link2をターゲットにSWD接続しておきます。 以下は、ターゲットであるLPC11U35基板のCN1のピン、 PIN1: GND PIN7: SWCLK PIN19:SWDIO (1) 上で使ってきた「toppers_ssp_cq_lpc11u35」というフォルダをLPCXpressoにインポートします。(注1) (a) LPCXpressoのメニューから、「File」-「Import...」 -「General」-「Existing Projects into Workspace」で、「Next」。 (b) 「Select root directory」で「toppers_ssp_cq_lpc11u35」を選択します。 (c) 「Copy project into workspace」のチェックをはずします。(好みによる) (d) 「Finish」で取り込み完了です。 これで、IDEからコンパイルできます。 (2) Make プロジェクトメニューを出す。 メニューから「Window」-「Show View」-「Other」-「Make」-「Make Target」で出るウインドウで、 「make clean」「make all 」「make depend」ができる様になります。 (3) デバッグ設定 (a) IDEでプロジェクトフォルダを右クリック「Debug as」-「Debug Configrations...」を選択。 「C/C++ (NXP Semiconductors) MCU Application」を右クリック、「New」。 (b) 右の「Main」タブで C/C++ Application: build\ssp Project: toppers_ssp_cq_lpc11u35 「Apply」ボタンを押す。 (c) 「Debugger」タブで、 Stop on startup at: sta_ker (お好みで) 「Apply」ボタンを押す。 (d) 「Common」タブで Display in favorites menu : Debugにチェックする 「Apply」ボタンを押す。 (4) デバッグ開始 IDEのメイン画面に戻ります。 「緑の虫のアイコン」でリストを出して 「toppers_ssp_cq_lpc11u35 default」を選択します。 デバッグが開始されます。 * ポーティング時のメモ (1) ベースにさせて頂いたのは以前も書いた、こちらの方の https://bitbucket.org/NSaitoNmiri/toppers_ssp_lpc812 LPC812(Cortex-m0)に移植したバージョンです。 感謝 m(__)m。 (2) 既に、LPC1114+LPCOpenでポーティング済だったので、もう慣れました :D (注1)少なくともbuildフォルダ内で、configureとmake dependが済んでいる必要があります。 (注2)ビルドフォルダは都合上、必ず「build」という名前にしてください。 LPCXpressoを使わないならどうでも良いです。:D
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0)
| TrackBack(0)
| TOPPERS / RTOS
|
|


2014年01月14日
TOPPERS/SSP/ASP: 移植メモ ポータル
このページで入手できるTOPPERS一覧表。
TOPPERS kernel | ||||||
ボード/ MCU 価格 |
Board | MCU | Core | SSP | ASP | Library |
ARMv6 | ||||||
120円 (1) | LPC1114 CQ | LPC1114 | Cortex-M0 | v1.2.1 | - | LPCOpen v2.00a |
2480円 | LPC11U35 CQ | LPC11U35 | ↑ | v1.2.1 | - | LPCOpen v2.00a |
2400円 | LPCcappuccino | LPC11U37 | ↑ | - (v1.2.1) | - | LPCOpen v2.00a |
1000円 | STM32F0-Discovery | STM32F051 | ↑ | v1.2.1 | - | CMSIS Driver Library |
ARMv7-M | ||||||
1200円 | STM32VL-Discovery | STM32F100 | Cortex-M3 | v1.2.0 | v1.9.0 | CMSIS Driver Library |
2500円 | LPC1343 LPCxpresso | LPC1343 | ↑ | --- | v1.6.0 | LPCOpen v2.0.5 |
3000円 | LPC1769/8 LPCxpresso | LPC1769/8 | ↑ | - | v1.6.0 | LPCOpen v1.0.3 |
ARMv7E-M | ||||||
1250円 | STM32F3-Discovery | STM32F303 | Cortex-M4F | - | v1.9.1 | CMSIS Driver Library |
1750円 | STM32F4-Discovery | STM32F407 | ↑ | - | --- | CMSIS Driver Library |
1690円 | NUCLEO-F411RE | STM32F411 | ↑ | - | --- | STM32CubeF4 HAL driver Library |
ARM7 | ||||||
1750円 | CQ-FRK-NXP-ARM基板 | LPC2388 | ARM7DTMI | - | v1.6.0 | - |
.... ldr r0, =hardware_init_hook cbz r0, start_1 orr r0, #1 blx r0 .... .... start_5: ldr r0, =software_init_hook cbz r0, start_6 orr r0, #1 blx r0 ....上の様にCortex-M系はblx命令を使うときはThumbステートを維持する必要があるので、 ジャンプ先アドレス・オペランドr0の最下位ビットは1である必要があります。 hardware_init_hookをアセンブラで実装する予定なら、 「target/***name**/target_support.S」を以下のように変更します。
.align 2 .code 16 .fpu softvfp .syntax unified .text .globl hardware_init_hook hardware_init_hook: bx r14上のbx命令のリターン先であるr14の最下位ビットは、自動で1にセットされています。 * コンパイル時の注意ポイント: 確認したコンパイラはLaunchpadのarm-none-eabi-gccです。 v4.7.x系列以降なら大丈夫だと思います。 (時期によって自分で動作確認に使うバージョンは変動します。) https://launchpad.net/gcc-arm-embedded (1) 都合上、ソースコードやテキストファイルは全て文字コードを euc-jpから「UTF-8/LF」に変更してあります。 (以下のツールでフォルダごと文字コードを変更可能です。) KanjiTranslator http://www.kashim.com/kanjitranslator/ (2) Windows7 32bit + MinGW/MSys 環境でコンパイル確認しました。 コンフィグレータ(cfg)のバージョン TOPPERS SSP は、 cfg.exe: v1.7.0 TOPPERS ASP は、 cfg.exe: v1.9.0 を使いました。(添付済み) Ubuntu(Linux)でコンパイルする場合: ダウンロードしたアーカイブを解凍した後、 (1) トップフォルダのconfigureファイルに実行属性を追加。 (2) Linux用のコンフィグ用ファイルを http://www.toppers.jp/cfg-download.html から取得。 gunzip で解凍後に名前をcfgに変更し、実行属性を追加し、 cfg/cfgフォルダにコピーする。
Performance evaluation program (0) Measurement overhead 1 : 7046 2 : 2940 4 : 11 5 : 3上の様に最初の列が、実行にかかった時間[usec]、次の列が回数になります。 計測1回当たりのオーバヘッドは平均するとざっくり、tmesure=1.3[usec]となりました。 次にtest/perf4.cを実行してタスク切り替えのオーバヘッドを計測します。
Performance evaluation program (4) Execution times of act_tsk without task switch 4.6 -1.3 = 3.3[usec] 4 : 3226 5 : 6738 7 : 18 8 : 18 Execution times of act_tsk with task switch 5.4 -1.3 = 4.1[usec] 5 : 5911 6 : 4038 8 : 34 9 : 17 Execution times of iact_tsk with task switch 10 -1.3 = 8.7[usec] 10 : 1000上の様になりました。黄色い文字は計算結果(平均時間-tmesure)を追記してあります。 黄色い文字で上から、 3.3[usec]: 自タスクより優先度の低いタスクに起床命令を発効し、 そのタスクが実行待ちになるまでの時間(実行はされない)。 4.1[usec]:自タスクより優先度の高いタスクに起床命令を発効し、 そのタスクが実行待ち状態から起床し、実行開始されるまでの時間。 8.7[usec]:割り込み内から、優先度の高いタスクを起床し、そのタスクの 実行が開始されるまでの時間。 正確な表現はuser.txtに譲るとして、 STM32F3-Discovery(syscloc=72MHz)の場合ざっくり、 通常のタスク切り替えに3〜4[usec] 割り込み内からだと、9[usec]程度でしょう。 これらから、 Cortex-M3のSTM32VL-Discovery(syscloc=24MHz)を推定すると、 単純にクロック比で3倍? * タスク切り替え時間の計測 / STM32VL-Discovery / asp-1.9.0 予想通りかどうか確認しようとしましたが、 STM32VL-Discovery(sysclock=24MHzは、SRAMが8kbyteしかないのテでストプログラムがコンパイル不能でしたので、 スタックや計測時間配列を削ってなんとか動かしました。 test/perf0.c: tmesure=2.8[usec]
Performance evaluation program (0) Measurement overhead tmesure = 2.8[usec] 2 : 1821 3 : 8150 8 : 14 9 : 15となりました。 test/perf4.c:
Performance evaluation program (4) Execution times of act_tsk without task switch 9.2 - 2.8 = 6.4[usec] 9 : 7922 10 : 1988 15 : 90 Execution times of act_tsk with task switch 10.4 - 2.8 = 7.6[usec] 10 : 5863 11 : 4029 16 : 82 17 : 26 Execution times of iact_tsk with task switch 18 - 2.8 = 15.2[usec] 18 : 1000上記数字群から比を計算すると約1.9倍程度。 6.4/3.3 = 約1.9倍 7.6/4.1 = 約1.9倍 15.2/8.7 = 約1.8倍 で、 STM32F3-Discoveryとの動作クロック比は、 STM32VL-Discovery(24MHz) : STM32F3-Discovery(72MHz) = 1 : 3 なので、3倍程度になる予想でしたが、はずれました。xD これは、F3が遅いのか、F1が早いのか、その逆か、はたまた他の要因か、ちょっと謎。 そか、72MHzだとFlashのディレイ/ウエイトが大きいんだ。多分これか。 * リポジトリ 更新するかどうかは微妙だけど、最新版のリポジトリ。 TOPPERS/SSP: toppers_ssp_cq_lpc11u35 (LPCOpen 2.x) toppers_ssp_cq_myarm_lpc1114 (LPCOpen 2.x) toppers_ssp_stm32f0_discovery (CMSIS) toppers_ssp_stm32vl_discovery (CMSIS) TOPPERS/ASP: toppers_asp_stm32vl_discovery (CMSIS) toppers_asp_stm32f3_discovery (CMSIS) toppers_asp_lpc1343_xpresso (LPCOpen 2.x) toppers_asp_lpc176x_xpresso (LPCOpen 1.x) toppers_asp_cq_arm_lpc2388 参考にしたページ: リンカスクリプトは、ねむいさんのプロジェクトで配布されているものを利用させていただきました。m(__)m ねむいさんのぶろぐ http://nemuisan.blog.bai.ne.jp ARM アーキテクチャリファレンスマニュアル http://www.ced.is.utsunomiya-u.ac.jp/lecture/2013/aca/ARMjp-vH.pdf (注1) まず、sampleフォルダ内のMakefileをtestフォルダにコピーしておきます。 次にbuildフォルダで、 ../configure -T stm32f3_discovery_gcc -A perf0 -t ../test/ -U "test_lib.o histogram.o" ; make depend; make を実行、asp.srecをマイコンに書き込んで実行します。結果はUARTのデフォルトポートに出力されます。
posted by Copyright (C) avrin All Rights Reserved. at 00:01| Comment(2)
| TrackBack(0)
| TOPPERS / RTOS
|
|


簡単! TOPPERS/SSP: STM32F0-DiscoveryでLEDチカチカする
と、いうことで、ここまでの経緯、 TOPPERS/SSP を STM32VL-Discovery (STM32F100RB)で動かす 簡単! TOPPERS/SSP: STM32VL-DiscoveryでLEDチカチカする 簡単! TOPPERS/ASP: STM32VL-DiscoveryでLEDチカチカする 2013年末には STM32VL-Discoveryボードの在庫がありましたが、 現在(2014/01)は売りきれ中になっています。 ここまで来た以上 (爆 、更に値段の安い、800円ポッキリでデバッガ付の評価ボード STM32F0-DiscoveryボードにTOPPERS/SSPをポーティングする決意をしました。xD (参考: STM32F0 Discovery: シンプル・スケジューラ) STM32F0DISCOVERY Discovery kit for STM32F051 line - with STM32F051R8 MCU http://www.st.com/web/jp/catalog/tools/FM116/SC959/SS1532/PF253215 Flash=64kbyte、SRAM=8kbyte, Clock=48MHz, Cortex-M0コアです。 で、 ゴリゴリゴリ。。。(どんな音やねん :D) orz orz ゴリッ!?。。。 orz (オイ 。。。 動いた! (^^)/ (^^)/ で、 TOPPERS/SSPを使ってSTM32F0-Discovery基板でLEDチカチカしてみました。 http://akizukidenshi.com/catalog/g/gM-06255/ この基板とUSBケーブルさえあれば、全部無料のツールを使って、 RTOSで簡単にLEDチカチカを動かすことができます。:D (OpenOCDでデバッグもできちゃいます) いつも「sample」フォルダのsample1を使うのもアレなので、 独自フォルダを作ってゼロからプロジェクトファイルを作ってみました。 (1)「sample_led」フォルダを「sample」フォルダと並列な場所に追加しました。 (2) その中にLEDチカチカ用ファイル群を入れます。 led_blink.c led_blink.h led_blink.cfg Makefile (下記のダウンロードファイルの中に含まれています) プロジェクトをコンパイル: トップフォルダ下で、mkdir build cd build ../configure -T stm32f0_discovery_gcc -f -A led_blink -t ../sample_led make depend make
でコンパイル終了です。( コンパイルの方法は以前の話も参照して下さい) あとは、ssp.recをST-LINK Utility(無料のツール)で書き込めば、2個のLEDが別周期でチカチカします。 (^^)/ * ROM/RAMサイズ 使用したARM CコンパイラはLaunchpadの以下のバージョンです。 gcc version 4.7.4 20130613 (release) [ARM/embedded-4_7-branch revision 200083] 上のled_blinkプログラムは「-f」オプション付で、以下の様になりました。text data bss dec hex filename 7023 0 1200 8223 201f ssp「-f」オプションがない場合は、以下の様に500バイト程度増加してしまいす。text data bss dec hex filename 7531 0 1200 8731 221b sspsampleプログラム デフォルトのsample1も動きます。buildフォルダで以下の様にコンパイルしたあとマイコンに書き込みます。rm * ../configure -T stm32f0_discovery_gcc -f make depend makeコンパイル結果、text data bss dec hex filename 10297 8 2804 13109 3335 sspSTM32F0-Discoveryボード上のUSART1端子を使います。 PA9: TX PA10: RX ボーレートは115200bpsです。 USB-UART変換器などでパソコンにつないで、TeraTermなどを開いておきます。 ボード上の黒いボタン(リセット)を押せば、最初からスタートします。 動作は、ここと同一です。TOPPERS/SSP Kernel 1.2.0 with STM32F0-DISCOVERY (STM32F051R8T6) 2014/01 ported by dinau Copyright (C) 2010 by Meika Sugimoto Copyright (C) 2010 by Naoki Saito Nagoya Municipal Industrial Research Institute, JAPAN Sample program starts. #act_tsk(2) task3 is running (001). * task3 is running (002). * task3 is running (003). * task3 is running (004). * task3 is running (005). * task3 is running (006). * #act_tsk(0) task1 is running (007). | task1 is running (008). | task1 is running (009). | task1 is running (010). |* Download ここに移動しました。 * ポーティング時のメモ (1) ベースにさせて頂いたのは以前も書いた、こちらの方の https://bitbucket.org/NSaitoNmiri/toppers_ssp_lpc812 LPC812(Cortex-m0)に移植したバージョンです。 感謝 m(__)m。 (2) STM32VL-Discovery(STM32F100/Cortex-m3)と今回のSTM32F0-Discovery(STM32F051/Cortex-M0)は、 事前調査でUSART部はソフト的にフルコンパチブルと記載されていましたが、 AN3364: Migration and compatibility guidelines for STM32 microcontroller applications いざ書き始めると、 アドレスは違うは、ビット位置は違うは、送受信レジスタは分断されているは等々で 何がどうフルコンパチブルなのか小一時間(ry (3) そんなこともあり、ねむいさんの(http://nemuisan.blog.bai.ne.jp)ところからOpenOCDを頂いてきて、 Insight経由でデバッグしたら、 もう天国 xD。 Insight: http://en.sourceforge.jp/projects/sfnet_netx-arm-elf-gc/releases/ http://en.sourceforge.jp/projects/sfnet_netx-arm-elf-gc/downloads/Insight/arm-none-eabi-insight-7.4.50.20111222-cvs-mingw32-netx.0.7z/ ねむいさん作のIO_VIEWモジュールでさらに大助かりでした。m(__)m ただ、CPUレジスタを見ようとすると、Insightがクラッシュするのが残念でしたが、(原因未調査) 今回はCPUレジスタ見なくても大丈夫でした。(オイ(注1) (4) ディスパッチャ呼び出し部 「arch\arm_m_gcc\prc_support.S」のstart_dispatch処理の以下の部分、b dispatcherをldr r0, =dispatcher movs r1, #0x00000001 orrs r0, r0 , r1 bx r0に変更してあります。(もう1箇所ある(exit_kernel)) Cortex-M0の相対ブランチ命令「b」は、前後に2kbyteの範囲にしか飛べないので、 リンク時にジャンプ先のオブジェクト・サイズが増減したり、リンク順が変わると ジャンプ先が±2kbyteを超えて、コンパイルエラーになってしまいます。 「bx」命令にすることで、この問題を回避しました。 * その他のメモ $ rm *; ../configure -T stm32f0_discovery_gcc -f -A led_blink -U stm32f0xx_io_view.o -t ../sample_led -a ../sample_led ; make depend ; make (注1)ねむいさんに修正していただけました。m(__)m
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(2)
| TrackBack(0)
| TOPPERS / RTOS
|
|


2014年01月13日
簡単! TOPPERS/ASP: STM32VL-DiscoveryでLEDチカチカする
と、いうことで。 以前の話は、ここ。 2014年早々に、TOPPERS/ASP 1.9.0カーネルがリリースされていたので、 この機会にSTM32VL-Discoveryにポーティングしてみました。 ベースにしたTOPPERS/ASPはSTBEE用の1.8.0簡易パッケージです。 http://www.toppers.jp/asp-e-download.html で、 TOPPERS/ASPを使ってSTM32VL-Discovery基板でLEDチカチカしてみました。 http://akizukidenshi.com/catalog/g/gM-04276/ この基板とUSBケーブルさえあれば、全部無料のツールを使って、 RTOSで簡単にLEDチカチカを動かすことができます。:D (OpenOCDでデバッグもできちゃいます) いつも「sample」フォルダのsample1を使うのもアレなので、 独自フォルダを作ってゼロからプロジェクトファイルを作ってみました。 (1)「sample_led」フォルダを「sample」フォルダと並列な場所に追加しました。 (2) その中にLEDチカチカ用ファイル群を入れます。 led_blink.c led_blink.h led_blink.cfg Makefile (下記のダウンロードファイルの中に含まれています) プロジェクトをコンパイル: トップフォルダ下で、mkdir build cd build ../configure -T stm32vl_discovery_gcc -f -A led_blink -t ../sample_led make depend make
でコンパイル終了です。( コンパイルの方法は以前の話も参照して下さい) あとは、asp.recをST-LINK Utility(無料のツール)で書き込めば、2個のLEDが別周期でチカチカします。 (^^)/ で、メインプログラム(led_blink.c)はこんな感じ、 (TOPPERS/SSPと同じです)#include <kernel.h> #include "kernel_cfg.h" #include "led_blink.h" #include "stm32vl_discovery.h" #define set_port_bit(reg, pos, state) \ ( (state) ? sil_wrw_mem((void*)GPIO_BSRR(reg), 0x01 << (pos)): \ sil_wrw_mem((void*)GPIO_BRR(reg), 0x01 << (pos)) ) #define led1(state) set_port_bit( GPIOC_BASE, 9, state) #define led2(state) set_port_bit( GPIOC_BASE, 8, state) /* メインプログラム。 優先度 6 */ void main_task(intptr_t exinf) { sta_cyc(CYC1); /* 周期500msecのサイクリックハンドラを起動 */ sta_cyc(CYC2); /* 周期100msecのサイクリックハンドラを起動 */ while(1){ /* do someting */ /* その他の処理 */ } } /* LED1 点滅タスク。 優先度 5 */ void led_task1(intptr_t exinf) { static uint8_t flg1 = 0; led1( flg1 ); flg1 = ~flg1; /* 状態を反転 */ } /* LED2 点滅タスク。 優先度 4 */ void led_task2(intptr_t exinf) { static uint8_t flg2 = 0; led2( flg2 ); flg2 = ~flg2; /* 状態を反転 */ } /* LED用 サイクリックハンドラ */ void cyclic_handler(intptr_t exinf) { ID tskid = (ID)exinf; (void)iact_tsk(tskid); /* led_taskn() (n=1,2)を起動 */ }メインタスクmain_task()は最低優先度6、while(1){}の無限ループで CPUを100%占有した状態で放置してあります。 そこへ、サイクリックハンドラから起動された優先度の高いLED反転タスクが プリエンプト(横取り)して実行されるという構図です。 設定ファイル(led_blink.cfg)は以下の様にしてみました。#include "led_blink.h" INCLUDE("target_timer.cfg"); INCLUDE("syssvc/serial.cfg"); INCLUDE("syssvc/banner.cfg"); CRE_TSK( MAIN_TASK ,{ TA_ACT , 0 , main_task , MAIN_PRIORITY , STACK_SIZE , NULL }); CRE_TSK( LED_TASK1 ,{ TA_NULL , 0 , led_task1 , TASK1_PRIORITY , STACK_SIZE , NULL }); CRE_TSK( LED_TASK2 ,{ TA_NULL , 0 , led_task2 , TASK2_PRIORITY , STACK_SIZE , NULL }); CRE_CYC( CYC1, { TA_NULL , LED_TASK1 , cyclic_handler , 2000 , 0 }); CRE_CYC( CYC2, { TA_NULL , LED_TASK2 , cyclic_handler , 100 , 0 });ヘッダファイル(led_blink.h)、 スタックの設定値はまだよく分っていないので適当です。#ifndef TOPPERS_LED_BLINK_H #define TOPPERS_LED_BLINK_H /* * ターゲット依存の定義 */ #include "target_test.h" #define TASK1_PRIORITY (5) #define TASK2_PRIORITY (4) #define MAIN_PRIORITY (6) #define STACK_SIZE (400) #ifndef TOPPERS_MACRO_ONLY extern void main_task(intptr_t exinf); extern void led_task1(intptr_t exinf); extern void led_task2(intptr_t exinf); extern void cyclic_handler(intptr_t exinf); #endif /* TOPPERS_MACRO_ONLY */ #endif /* TOPPERS_LED_BLINK_H */* ROM/RAMサイズ 使用したARM CコンパイラはLaunchpadの以下のバージョンです。 gcc version 4.7.4 20130613 (release) [ARM/embedded-4_7-branch revision 200083] 上のled_blinkプログラムは「-f」オプション付で、以下の様になりました。text data bss dec hex filename 11716 0 2620 14336 3800 asp「-f」オプションがない場合は、以下の様に4kバイト程度増加してしまいす。text data bss dec hex filename 15906 0 2620 18526 485e aspフル機能sampleプログラム デフォルトのsample1も動きます。buildフォルダで以下の様にコンパイルしたあとマイコンに書き込みます。rm * ../configure -T stm32vl_discovery_gcc -f make depend makeSTM32VL-Discoveryボード上のUSART1端子を使います。 PA9: TX PA10: RX ボーレートは115200bpsです。 USB-UART変換器などでパソコンにつないで、TeraTermなどを開いておきます。 ボード上の黒いボタン(リセット)を押せば、最初からスタートします。 リセット直後は、task1,task2,task3がアクティブになって、一番優先度の高いtask1が 表示され続けます。 コマンドを入力すれば、TOPPERS/ASPの多数のシステムコールの動作確認ができます。 * Download ここに移動しました。 リポジトリ https://bitbucket.org/dinau/toppers_asp_stm32vl_discovery
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0)
| TrackBack(0)
| TOPPERS / RTOS
|
|

