昨日はyottaのことを書いたが、mbed OSを使ったアプリを作ってみた方がよいんじゃないかと思った。
いきなり海に飛び込んで、足が吊ったのと同じようになっているからだ。
Getting Started Guides
一番上に、mbed-driversというのがあるから、それを試してみよう。
昨日Windowsにインストールしたyottaを立ち上げ、適当にディレクトリを作って、
(workspace) E:\Prog\mbed\mbed-drivers>yotta install mbed-drivers
info: get versions for mbed-drivers
info: download mbed-drivers@0.11.2 from the public module registry
info: get versions for win
error: could not install target win at for win
error: win does not exist in the targets registry. Check that the name is correct, and that it has been published.
インストールする前にターゲットの切替をするのね。。。
昨日はFreescaleのを選んだけど、もっとふさわしいのはないかねぇ。
とかやっている間に、もっとチュートリアルっぽいのがないか探したところ、こちらが見つかった。
Running your first mbed OS application
Step 2
(workspace) E:\Prog\mbed>cd blinky(workspace) E:\Prog\mbed\blinky>yotta initEnter the module name: <blinky>Enter the initial version: <0.0.0>Is this an executable (instead of a re-usable library module)? <no> yesShort description: LED blink testAuthor: hiro99maWhat is the license for this project (Apache-2.0, ISC, MIT etc.)? <Apache-2.0>
最初に入力を求められるmodule nameは、デフォルトはフォルダ名になるみたい。
あとは、適当だ。
生成したファイルを見ると、blinkyってのがない。
ヘッダが入るらしいフォルダらしいのだが、まああとで考えよう。
Step 3
次は、targetの検索。
そうそう、これが知りたかったのだ。
今朝の時点では、こうだった(2015/11/07 10:27)。
(workspace) E:\Prog\mbed\blinky>yotta search --limit 1000 targettest-target-dep 0.0.2:Test Target Test Dependenciesautopulatedst-nucleo-f401re-gcc 0.1.0:Official mbed build target for the mbed st-nucleo-f401re development board.mbed-target:nucleo-f401re, mbed-official, nucleo-f401re, gccbbc-microbit-classic-armcc 0.1.0:Official mbed build target for the microbit, using the armcc toolchain.mbed-target:nrf51822, mbed-official, nrf51822, nordic, armcc, microbitstm32f429i-disco-gcc 0.0.16:Official mbed build target for the mbed stm32f429i-disco development board.mbed-target:discovery-f429zi, mbed-official, stm32f429i-disco, gccnordic-nrf51822-16k-gcc 0.0.11:Official mbed build target for the mbed nrf51822 development board, using the armgcc toolchain.mbed-target:nrf51822, mbed-official, nrf51822, nordic, gcctarget-onsemi-ncs36510-gcc 0.1.0:Official mbed build target for .mbed-official, mbed, onsemi, ncs36510, gccst-stm32f439zi-gcc 0.0.4:Official mbed build target for the st stm32f439zi microcontroller.mbed-target:nucleo-f439zi, mbed-official, stm32f439i, gccnordic-nrf51822-32k-gcc 0.0.8:Official mbed build target for the nrf51822 32KB chip.mbed-target:nrf51822, mbed-official, nrf51822, nordic, gccstm32f411re-nucleo-gcc 0.1.0:Official mbed build target for the mbed st-nucleo-f411re development board.mbed-target:nucleo-f411re, mbed-official, stm32f411re-nucleo, gccnordic-nrf51822-16k-armcc 0.0.11:Official mbed build target for the mbed nrf51822 development board, using the armcc toolchain.mbed-target:nrf51822, mbed-official, nrf51822, nordic, armccbbc-microbit-classic-gcc-nosd 0.1.2:Official mbed build target for the BBC micro:bit, using the armgcc toolchain, without Softdevice.mbed-target:nrf51822, mbed-official, nrf51822, nordic, gccnrf51dk-gcc 0.0.4:Official mbed build target for the nRF51-DK 32KB platform.mbed-official, mbed-target:nrf51_dk, gccefm32gg-stk-gcc 0.3.4:Official mbed build target for the mbed EFM32GG STK3700 development board, using the GCC toolchain.mbed-target:efm32gg-stk, mbed-official, efm32gg, efm32gg-stk, gccnrf51dk-armcc 0.0.4:Official mbed build target for the nRF51-DK 32KB platform.mbed-official, mbed-target:nrf51_dk, armccbbc-microbit-classic-armcc-nosd 0.1.0:Official mbed build target for the microbit, using the armcc toolchain, without soft device.mbed-target:nrf51822, mbed-official, nrf51822, nordic, armcc, microbitx86-linux-native 1.0.0:Build target for programs compiled natively for Linuxlinux, nativembed-gcc 0.1.3:base mbed build target for gcc toolchainmbed-official, gccx86-osx-native 0.0.7:Build target for programs compiled natively for OS Xlibc 0.0.3:libc shim module: pulls in the platform libc when compiling for nostdlib targets
libcJames Crosby <james.crosby@arm.com>x86-linux-native-coverage 0.0.3:Build target for programs compiled natively for Linux with gcovlinux, native, coverageublox-odin-w2-gcc 0.0.4:Official mbed build target for the ublox odin-w2 module.ublox-odin-w2, mbed-official, odin-w2, gcckinetis-k64-armcc 1.0.0:Official mbed build target for Freescale Kinetis K64 family chips, using thearmcc toolchain.mbed-official, mbed, kinetis, kinetis-k64, freescale, mk64f, mk64fn1m0vll12, armccublox-c029-gcc 0.0.3:Official mbed build target for the mbed ublox c029 development board.ublox-c029, mbed-official, c029, gccblenano-gcc 0.0.2:Unofficial mbed build target for the RedBearLab BLE Nano boardmbed-official, gccmkit-gcc 0.0.4:Official mbed build target for the nrf51822 16KB chip.mbed-official, gccseeedtinyble-gcc 0.0.2:Official mbed build target for the nrf51822 16KB chip.nxp-lpc111x-gcc 0.1.1:Community member maintained build target for the NXP LPC111x using GCCnxp, lpc1114, lpc111x, lpc11cxx, gccScott Tsai <scottt.tw@gmail.com>mkit-armcc 0.0.4:Official mbed build target for the mkit nrf51822 16KB chip.mbed-official, armccmkit-classic-armcc 0.0.1:mbed classic build target for nrf51822 mkit.mingw 0.0.1:Build target for programs compiled natively for Windows via MinGWbbc-microbit-gcc 0.0.2:Official mbed build target for the BBC micro:bit chip.gcc, mbed-officialbbc-microbit-armcc 0.0.2:Official mbed build target for the BBC micro:bit chip.armcc, mbed-official
おお、stm32f411re-nucleo-gccというのがあるではないか!
(workspace) E:\Prog\mbed\blinky>yotta target stm32f411re-nucleo-gcc
info: get versions for stm32f411re-nucleo-gcc
info: download stm32f411re-nucleo-gcc@0.1.0 from the public module registry
info: get versions for mbed-gcc
info: download mbed-gcc@0.1.3 from the public module registry
armccとか買えるような身分でもないから、gccでよいのだ。
Step 4
ここで、mbed-driversをインストールするみたいだ。
依存しているもののインストールらしいので、mbed-driversは単独で動くものじゃなくて、文字通りドライバに相当するものということか。
(workspace) E:\Prog\mbed\blinky>yotta install mbed-driversinfo: get versions for mbed-driversinfo: download mbed-drivers@0.11.2 from the public module registryinfo: dependency mbed-drivers: ~0.11.2 written to module.jsoninfo: get versions for mbed-halinfo: download mbed-hal@1.0.5 from the public module registryinfo: get versions for cmsis-coreinfo: download cmsis-core@1.0.1 from the public module registryinfo: get versions for uallocinfo: download ualloc@1.0.2 from the public module registryinfo: get versions for minarinfo: download minar@1.0.1 from the public module registryinfo: get versions for core-utilinfo: download core-util@1.0.1 from the public module registryinfo: get versions for compiler-polyfillinfo: download compiler-polyfill@1.1.1 from the public module registryinfo: get versions for mbed-hal-stinfo: download mbed-hal-st@1.0.0 from the public module registryinfo: get versions for mbed-hal-st-stm32f4info: download mbed-hal-st-stm32f4@1.0.3 from the public module registryinfo: get versions for uvisor-libinfo: download uvisor-lib@1.0.6 from the public module registryinfo: get versions for mbed-hal-st-stm32cubef4info: download mbed-hal-st-stm32cubef4@1.0.2 from the public module registryinfo: get versions for cmsis-core-stinfo: download cmsis-core-st@1.0.0 from the public module registryinfo: get versions for cmsis-core-stm32f4info: download cmsis-core-stm32f4@1.0.2 from the public module registryinfo: get versions for dlmallocinfo: download dlmalloc@1.0.0 from the public module registryinfo: get versions for minar-platforminfo: download minar-platform@1.0.0 from the public module registryinfo: get versions for minar-platform-mbedinfo: download minar-platform-mbed@1.0.0 from the public module registry
yotta_modulesというフォルダにいろいろ入ってきた。
Step 5
sourceフォルダにapp.cppというファイルを作って、アプリを書く。
エントリポイントは、main()ではなくapp_start()とのこと。
#include "mbed-drivers/mbed.h"
namespace {
void blinky()
{static DigitalOut led(LED2);
led = !led;printf("LED = %d\r\n", led.read());
}}void app_start(int argc, char** argv){minar::Scheduer::postCallback(blinky).period(minar::milliseconds(500));}
Step 6
ビルド!
(workspace) E:\Prog\mbed\blinky>yotta build
(中略)
In file included from E:/Prog/mbed/blinky/yotta_modules/cmsis-core/cmsis-core/cmsis_nvic.h:35:0,
from E:/Prog/mbed/blinky/yotta_modules/uvisor-lib/uvisor-lib/uvisor-lib.h:23,
from E:/Prog/mbed/blinky/yotta_modules/uvisor-lib/source/unsupported.cpp:17:
E:/Prog/mbed/blinky/yotta_modules/cmsis-core-stm32f4/cmsis-core-stm32f4/cmsis.h:
35:23: fatal error: stm32f4xx.h: No such file or directory
#include "stm32f4xx.h"
^
おーーーい!!
以下を、blinky\yotta_modules\cmsis-core-stm32f4\cmsis-core-stm32f4にコピーすると、進んだ。
mbed/stm32f4xx.h at master · mbedmicro/mbed
mbed/stm32f411xe.h at master · mbedmicro/mbed
mbed/stm32f4xx_hal_conf.h at master · mbedmicro/mbed
が、今度はこんなエラーが。
E:/Prog/mbed/blinky/yotta_modules/mbed-drivers/mbed-drivers/platform.h:21:20: fatal error: device.h: No such file or directory
#include "device.h"
^
これは、NUCLEOって感じね。
FRDM-K64Fだと、yotta_modules\mbed-hal-frdm-k64f\mbed-hal-frdm-k64fに揃っていた。
mbedのコンパイルサイトで見てみると、mbed-src/targets/hal/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411REに中にあるものがそれっぽい。
これをexportして、解凍したファイルから適当に見繕って、yotta_modules\mbed-hal-st-stm32f4にコピーした。
E:/Prog/mbed/blinky/yotta_modules/minar-platform-mbed/minar-platform/minar_platform_types.h:29:17: error: 'MINAR_PLATFORM_TIME_BASE' was not declared in this scope
Time_Base = MINAR_PLATFORM_TIME_BASE,
^
これは、mbed-drivers\yotta_modules\mbed-hal-frdm-k64f\mbed-hal-frdm-k64f\target_config.hにあるんだけど、値の意味がわからん。
mbed-hal-st-stm32f429zi/mbed-hal-st-stm32f429zi at master · ARMmbed/mbed-hal-st-stm32f429zi
ここはSTM32F429ZIなんだけど、これだとdevice.hとかtarget_config.hなんかもある。
https://github.com/ARMmbed?utf8=%E2%9C%93&query=stm
検索しても、STM32F411はないなぁ。
もしかして、yotta buildする最初のメッセージの「unsupported platform」がすべての原因なのか?
*******************************************************************
* WARNING (uvisor-lib): unsupported platform; your code will still
* work but no security feature is provided;
* UVISOR_DISABLED is set by default
*******************************************************************
試しに、
(workspace) E:\Prog\mbed\blinky>yotta target stm32f429i-disco-gccしてからyotta buildすると、そういうメッセージは出ない。
でも、ビルドはやはりうまく行かない。
objects.hとか、その辺が関係しそうだ。。。
https://github.com/ARMmbed/mbed-hal
ここに、移植の際の説明が書かれている。
- mbed-hal
- mbed-hal-<vendor>
- mbed-hal-<vendor>-<chip family>
- mbed-hal-<vendor>-<chip>
- mbed-hal-<vendor>-<target>
が基本的な階層らしい。
いま私が使っている構成を見ると、こうなっている。
- mbed-hal
- mbed-hal-st
- mbed-hal-st-stm32f4
mbed-hal-st-stm32cubef4
うん、<target>に相当するものがないですね。
それに、さっきコピーしたPeripheralNames.hなんかは<chip-family>にあるべきもの。
それがmbed-hal-st-stm32f4に入っていなかったことからすると、まだこの辺はSTM32向けには整備されてないのかもしれない。
よし、今回は断念だ!
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。