工具/软件:TI-RTOS
我使用的是 TI 的标准 SafetyMCU_enet_bootloader。 当我刷写非 FreeRTOS 应用程序时、它能满足所有需求。 对于 FreeRTOS 应用程序、它不起作用。
我发现有类似问题的论坛:
根据论坛、我必须调整 intvect.asm 文件。 我做得不对、我不知道怎么做。
以下是我的引导加载程序链接器设置:
/*链接器设置 */
--retain="*(.intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*----------------- */
/*内存映射 */
MEMORY
{
引导程序(X):origin=0x00000000 length=0x00000020
Flash_API(RX):origin=0x00000020 length=0x000014E0
FLASHBOOT(RX):origin=0x00001500 length=0x0007EB00
堆栈(RW):origin=0x08000000 length=0x00002000
RAM(RW):origin=0x08002000 length=0x0003E000
//*用户代码开始(2)*/*
用户代码结束*/
}/*
用户代码开始(3)*/*
//*用户代码结束*/*---
--- */
/*段配置 */
SECTIONS
{
.intvecs :{}> vectors
flashAPI :
{
..\Debug\app\source\fapi_UserDefinedFunctions.obj (.text)
..\Debug\app\source\BL_flash.obj (.text)
--library=.\LIB\F021_API_CortexR4_LE.lib (.text)
}load = flash_API、run = RAM、load_start (api_load)、run_start (api_run)、size (api_size)
.text:{}> FLASHBOOT
.const:{}> FLASHBOOT
.cinit:{}> FLASHBOOT
.pinit:{}> FLASHBOOT
.bss :{}> RAM
.data :{}> RAM
.sysmem :{}> RAM
以下是我的应用程序 FreeRTOS 链接器设置:
/*链接器设置 */
--retain="*(.app_intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*-->------ */
/*内存映射 */
MEMORY
{
引导程序(X):origin=0x00020000 length=0x00000020
内核(RX):origin=0x00020020 length=0x00008000
FLASH0 (RX):origin=0x00028020 length=0x00157FE0
FLASH1 (RX):origin=0x00180000 length=0x00180000
堆栈(RW):origin=0x08000000 length=0x00000800
Kram (RW):origin=0x08000800 length=0x00000800
RAM (RW):origin=(0x08000800+0x00000800) length=(0x0003f800 - 0x00000800)
/*用户代码开始(2)*/
SDRAM (RW):origin=0x80000000 length=0x01000000
/*用户代码结束*/
}/*
用户代码开始(3)*/
/*用户代码结束*/*---
*/
/*段配置 */
SECTIONS
{
app_intvecs:{}>向量
闪存受保护区域中的/* FreeRTOS 内核*/
.kernelTEXT:{}>内核
.cinit :{}>内核
.pinit :{}>内核
/*将其余代码转换为用户模式闪存区域*/
.text :{}> FLASH0| FLASH1
.const :{}> FLASH0| FLASH1
/* RAM 受保护区域中的 FreeRTOS 内核数据*/
.kernelbss:{}>Kram
.kernelHEAP:{}> RAM
.bss :{}> RAM
.data :{}>RAM
/*用户代码开始(4)*/
.TI.noinit:{}>SDRAM
.TI.persistent:{}>SDRAM
.SDRAM :{}>SDRAM/*
用户代码结束*/
}