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,
还没弄好么,要不要别的说明?
不好意思,我确认一下
Hello,这个问题还需要国外那边的专家确认一下,有进展我会第一时间回复。
由于uVisor发布时间不久,网上相关文档不是非常完善,带来不便还请谅解。
谢谢!
Thanks, 原来是这样,还是非常感谢您们及时回复。 谢谢!
Hello,uVisor专家组最近修复了你上面提到的bug,最终版本会更新在mbed os 5.5版本里。如果你不着急的话,可以等mbed os 5.5版本正式发布之后再重新尝试以上步骤,应该这个月就会发布。
非常感谢你的问题!
Thanks,太好了,我等新版本下来之后再尝试,谢谢!
多谢Maggie
测试后,比之前好了很多,但还是发现一个bug,不能通过。
Compile [ 82.1%]: disabled.c[Error] core_generic.h@36,2: #error "Unknown MPU architecture. Check your Makefile."[Error] hardware_support.h@75,2: #error "Unsupported ARM core. Make sure CORE_* is defined in your workspace."[Error] core_generic.h@90,2: #error "Unsupported ARM core. Make sure CORE_* is defined in your workspace."[Error] virq.h@27,39: 'NVIC_VECTORS' undeclared here (not in a function)[Error] disabled.c@67,6: array index in non-array initializer[Error] virq_exports.h@39,21: array index in initializer not of integer type
但是我在Makefile中发现系统幽默认,并且和指导文件一样。
$~/code/uvisor/platform/stm32
ARCH_CORE:=CORE_ARMv7MARCH_MPU:=MPU_ARMv7M
CONFIGURATIONS:=\ CONFIGURATION_STM32_CORTEX_M4_0x10000000_0x0
是系统没有适配STM32F411吧。
Maggie离开了,我去问问别的工程师你的问题
好的 谢谢啦