我正在尝试使用自己的 Makefile 和链接器文件运行 freeRTOS。问题是当我试图用 3 个文件编译项目时:
tasks.c:1614:6: error: 'ulTIM6_OverflowCount' undeclared (first use in this function)
task.c - 有问题:
void vTaskGetRunTimeStats( signed char *pcWriteBuffer )
{
unsigned portBASE_TYPE uxQueue;
unsigned long ulTotalRunTime;
/* This is a VERY costly function that should be used for debug only.
It leaves interrupts disabled for a LONG time. */
vTaskSuspendAll();
{
#ifdef portALT_GET_RUN_TIME_COUNTER_VALUE
[1355] portALT_GET_RUN_TIME_COUNTER_VALUE( ulTotalRunTime );
#else ...
文件中的宏端口ALT_GEN_RUN_TIME_COUNTER_VALUE()
FreeRTOSConfig.h
#define portALT_GET_RUN_TIME_COUNTER_VALUE( ulCountValue ) \
{ \
TIM_Cmd( TIM6, DISABLE ); \
ulCountValue = ( ( ulTIM6_OverflowCount << 16UL ) | ( unsigned long ) TIM6->CNT ); \
TIM_Cmd( TIM6, ENABLE ); \
}
#endif /* FREERTOS_CONFIG_H */
最后是我要编译的 main.c 女巫:
#include "FreeRTOSConfig.h"
#include "task.h"
//problematic variable
unsigned long ulTIM6_OverflowCount = 0UL;
void main( void )
{
for( ;; );
}
错误前的编译器操作:
Compiling file: ./system_and_ST_code/STM32L1xx_StdPeriph_Driver/src/misc.c
/home/grochu/arm/arm-none-eabi-gcc-4_6/bin/arm-none-eabi-gcc -c -mcpu=cortex-m3 - mthumb -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/misc.lst -DSTM32L1XX_MD -MD -MP -MF out/misc.d -I. -I./ -I./include -I./portable/GCC/ARM_CM3 -I./Common/include -I./system_and_ST_code/CMSIS/CM3/DeviceSupport/ST/STM32L1xx -I./system_and_ST_code -I./system_and_ST_code/STM32L152_EVAL -I./system_and_ST_code/STM32L1xx_StdPeriph_Driver/inc -I./system_and_ST_code/Common -I./system_and_ST_code/CMSIS/CM3/CoreSupport ./system_and_ST_code/STM32L1xx_StdPeriph_Driver/src/misc.c -o out/misc.o
在我看来,变量:ulTIM6_OverflowCount 应该是全局的,并且在文件 task.c 中可见这是来自 freeRTOS 项目的示例,我从女巫那里删除了几乎所有代码,但它是 IAR 专用的,没有 makefile。制作文件来自 CortexM3 的优秀教程,它可以选择添加所有 INC 和 SRC 目录,链接器也来自这个项目。我的问题是我必须在哪里搜索错误:在链接器中?编译器?还是在项目中?当我使用另一个链接器(来自 chibiOS 项目)时,我没有收到任何错误,但我得到了一个损坏的 elf 文件。链接器是否有可能没有看到 main.c 字段?或者我忘了包含一些文件?我整天都在调试这个问题,现在我需要一些新的想法或提示。
非常感谢。