1 对uvisor进行移植,官方参考硬件平台有K64F、STM32F429,目标平台为STM32F411RE。移植参考文档为:https://github.com/ARMmbed/uvisor/blob/master/docs/core/PORTING.md#uvisor-porting-guide-for-mbed-os
2 移植步骤2.1 执行 1) 执行
$ mbed new code #建立code工程
2) 执行
$ cd ~/code $ git clone git@github.com:ARMMbed/uvisor.git
3)~/code/uvisor/platform/stm32/inc/configurations.h 没有修改configurations.h设置,默认设置。
4)~/code/uvisor/platform/stm32/Makefile.configurations
# MPU architecture ARCH_MPU:=ARMv7M # Family configurations CONFIGURATIONS:=\ CONFIGURATION_STM32_CORTEX_M4_0x10000000_0x0
5)对uvisor文件进行编译
$ cd ~/code/uvisor $ make
结果:
make[2]: Leaving directory '~/code/uvisor' make[1]: Leaving directory '~/code/uvisor'
2.2 对mbed-os操作1) 配置STM32F411的uvisor信息 ①pwd: ~/code/mbed-os/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F411xE/ device/TOOLCHAIN_GCC_ARM ②startup_stm32f411xe.S 加入uvisor_init初始化;
#if defined(FEATURE_UVISOR) && defined(TARGET_UVISOR_SUPPORTED) ldr r0, =uvisor_init /* [*] Insert this. */ blx r0 /* [*] Insert this. */ #endif /* defined(FEATURE_UVISOR) && defined(TARGET_UVISOR_SUPPORTED) */
③STM32F411XE.ld 配置内存分配信息,设置uvisor在STM32F411RE中的内存分配; ④~/features/FEATURE_UVISOR/importer/Makefile 设置目标板SMT32F4.stm32,因为和原始设置一样,所以并没有改动,同时有个疑问,本身STM32F429可行,但是设置完了之后STM32F429也不可行了。 ⑤配置完了之后,建立测试空main()进行测试(没有uvisor功能),单独编译没有问题。
3) 对~/features/FEATURE_UVISOR/importer 进行编译
$ make
cp TARGET_IGNORE/uvisor/docs/api/QUICKSTART.md ..//README.md cp:无法获取'TARGET_IGNORE/uvisor/docs/api/QUICKSTART.md' 的文件状态(stat):没有那个文件或目录 Makefile:59: recipe for target 'rsync' failed banmake: *** [rsync] Error 1
3)回到~code/添加mbed_app.json 进行设置,决定工程中是否使用uvisor
{ "target_overrides": { "*": { "target.features_add": ["UVISOR"], "target.extra_labels_add":["UVISOR_SUPPORTED"], } }, "macros": [ "FEATURE_UVISOR", "TARGET_UVISOR_SUPPORTED" ]
2.3 编译
$ mbed compile -m NUCLEO_F411RE -t GCC_ARM –c
Compile [ 0.3%]: AnalogIn.cpp [Error] cmsis_vectab_virtual.h@22,37: conflicting declaration of C function 'void vIRQ_SetVector(IRQn_Type, uint32_t)' [Error] cmsis_vectab_virtual.h@23,37: conflicting declaration of C function 'uint32_t vIRQ_GetVector(IRQn_Type)' [ERROR] In file included from ./mbed-os/cmsis/core_cm4.h:1536:0,
好的 谢谢啦
不客气