2016年01月18日

TOPPERS/ASP STM32F4バージョン出る 2016/01

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
posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | TOPPERS / RTOS | このブログの読者になる | 更新情報をチェックする

2014年02月15日

簡単! TOPPERS/SSP:トラ技付録 LPC11U35基板でLEDチカチカする

簡単! TOPPERS/SSP:トラ技付録 LPC11U35基板でLEDチカチカする
lpc11u35-led_blink-w640.jpg
と、いうことで、ここまでの経緯は、ここ、
 TOPPERS/SSP/ASP: 移植メモ ポータル
で、
TOPPERS/SSPを使ってトラ技付録LPC11U35基板でLEDチカチカしてみました。
http://toragi.cqpub.co.jp/tabid/707/Default.aspx
この基板とUSBケーブルさえあれば、全部無料のツールを使って、
RTOSで簡単にLEDチカチカを動かすことができます。:D
(LPC-Link2や、この基板がもう一枚あればデバッグもできちゃいます)
lpc11u35-cmsis-dap.jpg
上の写真は、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/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 -
(1) MCU価格 * はじめに * ポーティング時の特徴 * TOPPERS/SSP [Cortex-M3] STM32VL-Discovery: (STM32F100) LPC1343 LPCxpresso (LPC1343): [Cortex-M0] STM32F0-Discovery (STM32F051): CQ_MYARM_LPC1114ボード用 (LPC1114FN28(LPC1114/102)): トラ技 LPC11U35: LPCcappuccino(LPCカプチーノ)(LPC11U37): * TOPPERS/ASP [Cortex-M3] STM32VL-Discovery (STM32F100): LPC1343 LPCxpresso (LPC1343): LPC1769(LPC1768) LPXpresso [Cortex-M4] STM32F3-Discovery (STM32F303): STM32F4-Discovery (STM32F407): NUCLEO-F411RE (STM32F411): [ARM7] CQ-FRK-NXP-ARM基板 (LPC2388) : * バグ修正メモ hardware_init_hook、software_init_hookの呼び出し * コンパイル時の注意ポイント: コンフィグレータ(cfg)のバージョン Ubuntu(Linux)でコンパイルする場合: * キー割込みとDAC/sin波出力デモの実験 * タスク切り替え時間の計測 / asp-1.9.0 / STM32F3-Discovery * タスク切り替え時間の計測 / STM32VL-Discovery / asp-1.9.0 * リポジトリ * はじめに そういうわけで、TOPPERS ASP/SSP リアルタイムOS (RTOS) を、 http://www.toppers.jp 身近で低価格なマイコンボードに移植したまとめです。 ここまでの経緯と夢想中のものをまとめておきます。 * ポーティング時の特徴 (1) 生成されるFLASH ROMサイズを最小限に抑えること。 gccでFLASH占有サイズを極小にするオプションを有効にしてあります。 [-ffunction-sections, -fdata-sections]/[ -gc-sections ] オプションを適用済。 組み込みマイコン特有のノウハウを投入しています。 (2) TOPPERS ASP/SSPを身近で低価格のマイコンボードで手軽に試せること。 120円〜800円〜1000円台の低価格、高性能マイコン/評価ボードに対応。 (3) すぐに試せる、ボード付属のLEDをチカチカさせるサンプルを追加すること。 ポート制御がすぐに実験できます。 (4) 便利な周辺I/Oライブラリを内包すること。( LPCOpen library / CMSIS Peripheral driver library (and HAL) ) これにより得られるメリットは大きいと考える。 というか、絶大。 (5) すぐにFlashROMに書き込める、HEX、BINファイルを「binhex」フォルダに標準添付(一部を除く)。 マイコン/評価ボードの動作、生存も簡単に確認できます。 合わせて、 コンパイル時の注意ポイントをお読みください。 * TOPPERS/SSP [Cortex-M3] STM32VL-Discovery: (STM32F100) TOPPERS/SSP を STM32VL-Discovery (STM32F100RB)で動かす 簡単! TOPPERS/SSP: STM32VL-DiscoveryでLEDチカチカする Download v01: 2014/01: 新版 CMSIS Peripheral driver library内蔵版。(下記v04から派生) toppers_ssp_stm32vl_discovery_ssp-1.2.0-cmsis-v01-201401.zip v04: 2014/01: 古い版(CMSIS ライブラリなし ) もうメンテしない予定。 toppers_ssp_stm32vl_discovery-ssp-1.2.0-v04-201401.zip 変更点: (1) リンカスクリプトを、ねむいさん作のものをベースにした。m(__)m (2) --gc-sectionsに対応。Flashサイズをさらに小さくできます。 デフォルトで有効になっています。 v03: 2014/01: 変更点: (1) led_blinkデモでサイクリック・ハンドラの数を一つにした。 (2) リンカ・スクリプトの4byteアラインメント問題を修正。 コンパイルの最適化オプション変更やコード量の増加によって、 不可解な動作をする問題 :D が修正されます。 (3) OpenOCDデバッガ起動用スクリプト追加。(Windows) v02: 2013/12: 初版 LPC1343 LPCxpresso (LPC1343): 夢想中 :D [Cortex-M0] Cortex-M0については以下の方のポーティング結果を参考にさせて頂いて m(__)m 移植しています。 https://bitbucket.org/NSaitoNmiri/toppers_ssp_lpc812/wiki/Home STM32F0-Discovery (STM32F051): 簡単! TOPPERS/SSP: STM32F0-DiscoveryでLEDチカチカする Download v01: 2014/12: 新版 SSP-1.2.1に対応。 CMSIS Peripheral driver library内蔵版。 toppers_ssp_stm32f0_discovery_ssp-1.2.1-cmsis-v01-201412.7z v01: 2014/01: CMSIS Peripheral driver library内蔵版。(下記v02から派生) toppers_ssp_stm32f0_discovery_ssp-1.2.0-cmsis-v01-201401.zip v02: 2014/01: 古い版(CMSIS ライブラリなし ) もうメンテしない予定。 toppers_ssp_stm32f0_discovery-ssp-1.2.0-v02-201401.zip 変更点: (1) リンカスクリプトを、ねむいさん作のものをベースにした。m(__)m (2) --gc-sectionsに対応。Flashサイズをさらに小さくできます。 デフォルトで有効になっています。 v01: 2014/01: 初版 CQ_MYARM_LPC1114ボード用 (LPC1114FN28(LPC1114/102)): LPC11xx系はLPCOpen2.0ライブラリを使う予定。 同系列なので、どれか動けば簡単にほかも全部動くはず。 動いた。 (^^)/ ペリフェラル・ライブラリとして、LPCOpen2.0を内蔵しましたのでより便利に使えます。(^^)/ http://www.nxp-lpc.com/lpc_software/lpcopen/ Download 2014/10/29: SSP-1.2.1対応版 LPCOpen library v2.00aを内蔵しています。 toppers_ssp_cq_myarm_lpc1114_ssp-1.2.1-lpcopen-20141029-2.7z LPC1114FN28用ですが、LPC11xx系なら非常に簡単に移植可能と思われます。 あとは、トラ技付録の LPC11U35を待つだけ。:D トラ技 LPC11U35: http://toragi.cqpub.co.jp/tabid/707/Default.aspx 未発売 夢想中 :D 簡単! TOPPERS/SSP:トラ技付録 LPC11U35基板でLEDチカチカする Download 2014/10/29: SSP-1.2.1対応版 LPCOpen library v2.00aを内蔵しています。 toppers_ssp_cq_lpc11u35_ssp-1.2.1-lpcopen-20141029-2.7z v01: 2014/02: 初版 LPCOpen library v2.00aを内蔵しています。 toppers_ssp_cq_lpc11u35_ssp-1.2.0-lpcopen-v01-201402.zip LPCcappuccino(LPCカプチーノ)(LPC11U37): 未所有 https://strawberry-linux.com/catalog/items?code=12045 夢想中 :D 単にLPC11U35のFlash容量増加版と思われる。 * TOPPERS/ASP [Cortex-M3] STM32VL-Discovery (STM32F100): 簡単! TOPPERS/ASP: STM32VL-DiscoveryでLEDチカチカする Download v01: 2014/01: 新版 CMSIS Peripheral driver library対応版。(下記v05から派生) toppers_asp_stm32vl_discovery_asp-1.9.0-cmsis-v01-201401.zip v05: 2014/01: (未リリース) 変更点: 古い版(CMSIS ライブラリなし ) もうメンテしない予定。 (1) リンカスクリプトの変更し忘れを修正。(^^; (2) --gc-sectionsに対応。 v04: 2014/01: toppers_asp_stm32vl_discovery-asp-1.9.0-v04-201401.zip 変更点: (1) リンカスクリプトを、ねむいさん作のものをベースにした。m(__)m v03: 2014/01: 変更点: (1) リンカ・スクリプトの4byteアラインメント問題を修正。 コンパイルの最適化オプション変更やコード量の増加によって、 不可解な動作をする問題 :D が修正されます。 (2) OpenOCDデバッガ起動用スクリプト追加。(Windows) v02: 2014/01: 初版 LPC1343 LPCxpresso (LPC1343): 動いた (^^)/ LPCXpressoでデバッグもできた (^^)/ LPCOpen library 2.0.5を使って移植しました (^^)/ ペリフェラル・ライブラリとして、LPCOpen2.0を内蔵しましたのでより便利に使えます。(^^)/ http://www.nxp-lpc.com/lpc_software/lpcopen/ Download asp-1.6.0-lpcopen-lpc1343.zip LPC1769(LPC1768) LPXpresso LPCOpen library v1.0.3 / v2.xを使ったものを夢想中。 動いた (^^)/ 現在は、LPCOpen v1.0.3版です。: Download asp-1.6.0-lpcopen-lpc176x.zip [Cortex-M4] STM32F3-Discovery (STM32F4): CMSIS Peripheral Driverライブラリを内包しました。 ポーティングもこのライブラリをベースにしています。 Download v01: 2015/01 カーネルを最新に更新。 arm_m_gccフォルダも最新(2014/12/01)に更新。 その他は以下の古い版と同じです。 toppers_asp_stm32f3_discovery-asp-1.9.1-v01-201501.7z 古い版: v01: 2014/01 toppers_asp_stm32f3_discovery-asp-1.9.0-v01-201401.zip 注意点: DSP/USBライブラリは含みません。 FPUは、なぜだかうまく動きません。(^^; というか、 カーネル側でFPUレジスタのケアを全くしていないことに気づきました。(^^; これについては、以下の方のポーティングが参考になるはず。 http://sourceforge.jp/projects/toppersasp4lpc/ STM32F4-Discovery (STM32F4): 夢想中。 F3の移植ができたので結構楽に動くかも。 NUCLEO-F411RE (STM32F4): STM32CubeF4 HALドライバ版を計画中。 [ARM7] CQ-FRK-NXP-ARM基板 (LPC2388) : 以下の方のページから取得できる「asp_lpc2388_091021.tar.gz」をベースにさせていただきました。m(__)m SSEST5/事前実習/ASPとは * バグ修正メモ 以下は、ターゲット依存側、ターゲット実装マターの話です。 hardware_init_hook、software_init_hookの呼び出し *_init_hook関数を使わない場合は表面化しないものの、 使った場合は orzとなる。 orz 本家のCortex-M3ポートでバグがあるものがあるので修正しました。 「arc/arm_m_gcc/start.S」を以下のように修正します。
    ....
    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フォルダにコピーする。 Linuxの64bit環境だとコンフィグレータが動かないらしい。 うちでは、Linux x86 64bit Ubuntuで普通にコンフィグレータ動いてます。(^^)/ * キー割込みとDAC/sin波出力デモの実験 STM32F3-Discoveryで、CMSISライブラリに付属のDAC出力デモを実行してみた。 sample_ledフォルダ。 青ボタン用のEXTI0割込みを「カーネル管理割込み」として登録し、動作するかの実験。 青ボタンを押すとキー割込みが発生し、DAC出力が切り替わる(sin波出力とノコギリ波)事を確認した。 このデモ専用版。 LEDチカチカしつつ、上記デモを実行している。 DAC expample for rev.42.zip * タスク切り替え時間の計測 / asp-1.9.0 / STM32F3-Discovery 最初に計測そのものにかかる時間(tmesure)を計測します。 STM32F3-Discovery(Cortex-M4)で、sysclock=72MHz、Flashアクセスディレイは最適値(多分)、 gccはLaunchpad v4.8.3、gccの最適化は「-Os」 test/perf0.c を実行して表示させると、(注1)
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: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 ssp
sampleプログラム デフォルトのsample1も動きます。buildフォルダで以下の様にコンパイルしたあとマイコンに書き込みます。
rm *
../configure -T stm32f0_discovery_gcc -f 
make depend
make
コンパイル結果、
   text    data     bss     dec     hex filename
   10297      8    2804   13109    3335 ssp
STM32F0-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チカチカする

簡単! 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
make
STM32VL-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 | このブログの読者になる | 更新情報をチェックする