This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LS3137:引导加载程序 FreeRTOS 程序

Guru**** 2554850 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1259120/tms570ls3137-bootloader-freertos-program

器件型号:TMS570LS3137

大家好! 我对我的引导加载程序有疑问。 程序运行正常。 我能够录制一个简单的程序。 但现在、我想录制另一个使用 FreeRTOS 的程序。 我生成了.bin 并修改 sys_link、然后我用 FreeRTOS 记录了这个新程序。 但是当我想使用 FreeRTOS 运行新程序时、引导加载程序总是进入下面的部分:svcEntry b svcEntry 我真的需要帮助解决这个问题。 我不知道我能做什么来解决它。

我从 FreeRTOS 程序复制了 sys_link.cmd:

-retain="*(.intvecs)"

/* USER CODE BEGIN (1) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Memory Map */


MEMORY
{

VECTORS (X) : origin=0x00020020 length=0x00000020
FLASH_CODE (RX) : origin=0x00020040 length=0x008000-0x40 fill=0xFFFFFFFF
FLASH0 (RX) : origin=0x00028000 length=0x0014FFC0
FLASH1 (RX) : origin=0x00180000 length=0x00180000
STACKS (RW) : origin=0x08000000 length=0x00000800
KRAM (RW) : origin=0x08000800 length=0x00000800
RAM (RW) : origin=(0x08000800+0x00000800) length=(0x0003F800 - 0x00000800)


/* USER CODE BEGIN (2) */
/* USER CODE END */
}

/* USER CODE BEGIN (3) */
/* USER CODE END */

/*----------------------------------------------------------------------------*/
/* Section Configuration */

SECTIONS
{
.intvecs : {} > VECTORS
/* FreeRTOS Kernel in protected region of Flash */
.kernelTEXT : {} > FLASH0 | FLASH1
.cinit : {} > FLASH0 | FLASH1
.pinit : {} > FLASH0 | FLASH1
/* Rest of code to user mode flash region */
.text : {} > FLASH0 | FLASH1
.const : {} > FLASH0 | FLASH1
/* FreeRTOS Kernel data in protected region of RAM */
.kernelBSS : {} > KRAM
.kernelHEAP : {} > RAM
.bss : {} > RAM
.data : {} > RAM
}

非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Federico:

    您能否仅引用以下主题并执行我在代码中建议的修改?
    (+) TMS570LC4357:FreeRTOS 引导加载程序应用在 I2C 中遇到问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Jagadish:

    感谢您的答复。

    我在链接上看不到图像。 您能否再次分享建议的更改?

    我从引导加载程序共享了我的 sys_intvecs.asm 代码。

        .sect ".intvecs"
        .arm
    
    ;-------------------------------------------------------------------------------
    ; import reference for interrupt routines
    
        .ref _c_int00
        .ref _dabort
        .ref phantomInterrupt
        .def resetEntry
    
    ;-------------------------------------------------------------------------------
    ; interrupt vectors
    
    resetEntry
            b   _c_int00
    undefEntry
            b   undefEntry
    svcEntry
            b   svcEntry
    prefetchEntry
            b   prefetchEntry
            b   _dabort
            b   phantomInterrupt
            ldr pc,[pc,#-0x1b0]
            ldr pc,[pc,#-0x1b0]
    
        

    感谢你的帮助。 如果您需要有关我的代码的更多信息、请告诉我。

    此致、

    Federico.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Federico:

    尝试按如下方式修改应用程序 startup.c 代码:

    在您的应用代码中、尝试将 _mpuInit_函数之前的所有函数调用到 用户代码 begin (22)中、如上所示。

    执行上述修改并更新状态。 这是我的应用程序 startup.c 文件、供您参考。

    e2e.ti.com/.../HL_5F00_sys_5F00_startup.c

    此修改在应用程序 startup.c 代码中很重要、因为正如您在下面的 pic 中看到的那样

    systemInit 和 vimInit 等函数仅在复位原因为 POWERON_RESET 或 EXT_RESET 等时才会进行调用。 但是、引导加载程序在应用程序访问复位原因之前已经读取了此复位原因、引导加载程序代码将清除复位原因、因此、当应用程序读取 复位原因再次出现时、它将获得 NO_RESET、而不是实际的 POWERON_RESET 或 EXT_RESET 。 因此、由于这一原因 、systemInit 和 vimInit 等函数将 不会被执行、我们的应用程序代码将不会按照预期行为运行。

    请尝试执行建议的修改。

    --

    谢谢。此致、
    Jagadish。