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.

[参考译文] TMS570LC4357:引导加载程序 CAN 和 FreeRTOS

Guru**** 2430620 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1274699/tms570lc4357-bootloader-can-and-freertos

器件型号:TMS570LC4357

大家好、使用 FreeRTOS 运行程序并通过引导加载程序时遇到了问题。 没有 FreeRTOS 的程序工作正常、但当我在应用程序中使用 FreeRTOS 时、程序无法工作。 我可以加载它、但当我输入 run 命令时、它不起作用。 我该怎么办? 谢谢!

在这里、您可以找到应用链接器设置

/* Linker Settings */
--retain="*(.intvecs)"
/*----------------------------------------------------------------------------*/
/* Memory Map */
MEMORY
{
VECTORS (X) : origin=0x00010020 length=0x00000040
/*sector 4/5 are used for application */
FLASH_CODE (RX) : origin=0x00010060 length=0x80000 - 0x40 fill=0xFFFFFFFF
FLASH0 (RX) : origin=0x00090020 length=0x00200000 - 0x18000
FLASH1 (RX) : origin=0x00300020 length=0x00200000
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0007EB00
}
/*----------------------------------------------------------------------------*/
/* Section Configuration */
SECTIONS
{
.intvecs : {} > VECTORS
.text align(32) : {} > FLASH_CODE
.const align(32) : {} > FLASH_CODE
.cinit align(32) : {} > FLASH_CODE
.pinit align(32) : {} > FLASH_CODE
.kernelBSS align(32) : {} > FLASH_CODE
.kernelHEAP align(32) : {} > FLASH_CODE
.kernelTEXT align(32) : {} > FLASH_CODE
.bss : {} > RAM
.data : {} > RAM
.sysmem : {} > RAM
}

这里有引导加载程序 intvecs.asm、

    .sect ".intvecs"
    .arm

;-------------------------------------------------------------------------------
; import reference for interrupt routines

    .ref _c_int00
    .ref phantomInterrupt
    .def resetEntry

;-------------------------------------------------------------------------------
; interrupt vectors

resetEntry
        b   _c_int00
undefEntry
        b   undefEntry
svcEntry
        b   svcEntry
prefetchEntry
        b   prefetchEntry
dataEntry
        b   dataEntry
        b   phantomInterrupt
        ldr pc,[pc,#-0x1b0]
        ldr pc,[pc,#-0x1b0]

如果您需要任何其他文件、请问我、我将提供这些文件

再次感谢您

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

    尊敬的 Lorenzo:

    您可以参考以下主题:

    (+) TMS570LC4357:FreeRTOS 引导加载程序应用在 I2C 中遇到问题-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    这是一个类似你的最近的线程,并由我解决。 请应用上面主题中建议的修改。

    --

    谢谢。此致、
    Jagadish。

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

    好的、尝试一些解决方案后、有效的解决方案为:

    修改应用程序的 HL_sys_link.cmd、如下所示:

    /*----------------------------------------------------------------------------*/
    /* Memory Map                                                                 */
    
    MEMORY
    {
        VECTORS (X)  : origin=0x00010020  length=0x00000020 vfill = 0xffffffff
        KERNEL  (RX) : origin=0x00010040  length=0x00008000 vfill = 0xffffffff
        FLASH0  (RX) : origin=0x00018040 length=0x001F7FE0 vfill = 0xffffffff
        FLASH1  (RX) : origin=0x00210020 length=0x00200000 vfill = 0xffffffff
        STACKS  (RW) : origin=0x08000000 length=0x00000800
        KRAM    (RW) : origin=0x08000800 length=0x00000800
        RAM     (RW) : origin=(0x08000800+0x00000800) length=(0x0007f800 - 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  align(32) : {} > KERNEL
        .cinit       align(32) : {} > KERNEL
        .pinit       align(32) : {} > KERNEL
        /* Rest of code to user mode flash region */
        .text        align(32) : {} > FLASH0 | FLASH1
        .const       align(32) : {} > FLASH0 | FLASH1
        /* FreeRTOS Kernel data in protected region of RAM */
        .kernelBSS    : {} > KRAM
        .kernelHEAP   : {} > RAM
        .bss          : {} > RAM
        .data         : {} > RAM    
    
    /* USER CODE BEGIN (4) */
    /* USER CODE END */
    }
    

    由于引导加载程序的偏移为0x00010020、因此我必须重新计算存储器的来源。

    只需从 0x00010020开始、然后将长度与 Windows 十六进制计算器相加即可找到下一个来源。

    记忆程序进行填充以避免 ECC 错误。

    我不必修改这些段。

     

    接下来要做的是修改引导加载程序代码,

    这是 hl_sys_intvecs.asm

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

    我修改了原来的那个, 更改为 #0x10018以便重定向诸如中断、whatchdogs、FreeRTOS 函数等变量

    它现在在工作、谢谢您