完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
昨天尝试用CubeMx生成FreeRTOS, 使用编译器6.10编译失败,忙活了小半天也没搞出来, 今儿寻思着换个系统用UCOSIII, 终于搞出来了, 以下是移植记录:
1. 为什么非要用6.10呢? 首先是因为快, HAL库我用V5版本全编译一遍要3分钟, 用V6只需要30s 其次是因为超级智能的错误提示, 从下面的例子中就能看出来, 新版本编译器的错误提示简直是神了 2.我用的例程: 是原子H7拓展例程->UCOS拓展例程->例4-1 UCOSIII移植 修改编译器6.10后,出现一些警告和报错,下面一步步解决: 1. 警告解决: 这里发现例程中一个宏定义错误, 新的编译器很智能的提出来了(V5版本就没有) ../HALLIB/STM32H7xx_HAL_Driver/Incstm32h7xx_hal_usart.h(39):warning: '__STM32H7xx_HAL_USART_H' is used as a header guard here, followed by#define of a different macro [-Wheader-guard] ../HALLIB/STM32H7xx_HAL_Driver/Incstm32h7xx_hal_usart.h(40):note: '__STM3H7xx_HAL_USART_H' is defined here; did you mean'__STM32H7xx_HAL_USART_H'? 观察警告代码发现: 修改为正确的宏定义即可(PS.我发现原子不少的例程中这里的宏定义都是错的, 希望什么时候能改一下) 2. 错误解决: 2.1 编译器语法差别: 观察到错误: 这里涉及到了V5和V6编译器支持的语法不同, 所以需要在options里面把宏定义替换一下: 在Misc Controls中填入: [C] 纯文本查看 复制代码 -D__align(x)="__attribute__((aligned(x)))" -D__weak="__attribute__((weak))" -D__INLINE="__inline__" 2.2 printf报错解决: 观察到__FILE出现了重定义错误,本着能用就行的原则, 直接删掉例程中相关的代码即可: 2.3 未定义__i***解决: 再次编译, 报错如下: ..OBJTemplate.axf:Error: L6218E: Undefined symbol __i*** (referred from os_core.o). 搜索Keil官网相关文档(http://www.keil.com/support/man/docs/armclang_mig/armclang_mig_vvi1464869837179.htm), 发现__i***在ARM_acle.h中支持,故在报错文件os_cpu.h中添加arm_acle.h即可: 2.4 再次编译 无错误, 无警告, 使用阿波罗核心板测试例程,闪灯无问题, 更多例程将来有机会再测试 UCOSIII移植.zip (2.5 MB ) |
|
相关推荐
2个回答
|
|
受教了
|
|
|
|
要试试新版本看看。
|
|
|
|
只有小组成员才能发言,加入小组>>
490 浏览 0 评论
1030 浏览 1 评论
2411 浏览 5 评论
2732 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2550 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
585浏览 9评论
587浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
695浏览 6评论
563浏览 5评论
602浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-29 14:17 , Processed in 1.027122 second(s), Total 83, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号