1

独自の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 ...

ファイル内のマクロportALT_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フィールドを認識しなかった可能性はありますか?または、いくつかのファイルを含めるのを忘れましたか?私はこの問題のデバッグに一日中費やしましたが、今はいくつかの新しいアイデアまたはプロンプトが必要です。

どうもありがとう。

4

1 に答える 1

2

使用する前に、真の宣言を追加してみてください。

extern unsigned long ulTIM6_OverflowCount;

task.hできれば、との両方に含まれているようなヘッダーmain.ctask.c

于 2012-08-27T20:39:44.877 に答える