今天,周么在家试验cube-RTOS,首战即很不顺利。 先列举一下实验条件: cubeMX 4.9.0 (the newest) cubeF4 1.7.0(the newest) cubeF1 1.1.0(the newest)$ M1 M7 \1 |+ z" J! f6 u5 a: { keil v5.12.0.0 硬件环境STM32F4-Discovery板。 T; t7 q- i+ c, a9 q* { 6 T0 v6 r, v6 J; Z \& g/ }, m 过程和现象: j! G: |+ R" ?- j! P 今天在看freeRTOS的教程,本想做个实验,为了快速部署项目,在mx中选择F4-Discovery板作为原始模板。启用RTOS和UART2。输出MDK V5的工程。然后打开工程,直接编译。这时提示错误如下,基本上就是说没有预定义__TARGET_FPU_VFP。 接着,全局搜索__TARGET_FPU_VFP,发现只有两处提到,其中一处是刚才出错的位置。另一处是core_cm4.h文件中Line 118的位置。由此发现若要启用FPU还需要定义__FPU_PRESENT。尽管我不需要启用这个但是可以做个实验。我再工程设置中预定义这两个字符串。结果整个项目输出就一片糟糕,最终有134项错误,64个警告。大部分的错误都是1114错误,在于不支持register这个关键字。我暂时没法解决。 如下图: ' T- S8 o5 u4 v$ f W 然后我做了另一个实验,我将同样的cube模板生成IAR的程序测试,直接编译通过。! ?7 c( ?1 J, m 最后我有利用F103建立一个模板,生成keil MDK V5工程。结果编译通过。 m! b" B! ?5 @" P$ f2 d 问题和分析: 1、 RTOS在F4上难道必须定义__TARGET_FPU_VFP,这样定义是不是并不意味这要使用FPU。要使用FPU还需要打开__FPU_PRESENT。 2、 为什么在keil中编译通不过,而在IAR中却能够通过。编译不通过的原因的确与register有关吗?怎样才能通过编译。 3、 在F103种顺利编译,这个是不是意味着问题不来源于mx而是来源于cubef4?0 p4 O- J! y$ t o 4、 这是不是意味着cube库有些bug,而这是其中之一。如果是我是不是倒退到老的就能解决? 希望有类似环境的可以测试一下! |
谢谢你,对cube还是不熟。希望有人能提出建议。
对,一直没找到。但今晚在测试的发现可能是asm设置的问题,不过现在没确定。
谢谢你!
世界上最悲惨的是你费劲心机花了精力,却没找到答案。然后,你只是简单的从零重来一遍问题就解决了,可是问题是你连问题是怎么解决的都不知道!
" C7 j8 h% n0 L
今晚先忙别的事情,然后将之前的所有RTOS相关的工程啥没出,但是保留mx的模型,又生成一遍。这是没问题了。
) p! u% p/ j$ e; R
稍后再找找之前的错误是什么造成的。
但是初步怀疑是编译器或编译器设置造成的,与ST的cube和MX没有关系。因为记得白天用自己的笔记本试过发现port里面的__ASM都不能被识别。& @. ^& y; M5 R# ^, D- [