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.

[参考译文] TMDX570LC43HDK:从另一个裸机应用(引导加载程序)跳转到 FreeRTOS 任务创建失败

Guru**** 2511985 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1549922/tmdx570lc43hdk-freertos-task-creation-fails-when-jumped-from-another-bare-metal-application-boot-loader

部件号:TMDX570LC43HDK


工具/软件:

您好、
当我从一个应用程序(引导加载程序)跳转到 FreeRTOS 应用程序时、xTaskCreate 函数失败。 问题
中断向量表中。 在创建任务期间、它会调用“BaseType_t xRunningPrivileged = prvRaisePrivilege ();“、
但我没有找到“prvRaisePrivilege “的定义。 这应在“portasm.asm “中定义、如下所示:
/source/os_mpu_wrappers.c:/* TCJ:检查必须为零、请参阅 portasm.asm 中的 prvRaisePrivilege */

我无法在中找到它
github.com/.../portASM.asm

这是我的引导加载程序应用程序的链接器脚本内容:
移动数据

矢量 (RX):origin = 0x00000000、length = 0x00000020 /*矢量表*/
Bootloader (RX):origin = 0x00000020、length = 0x0001FFE0/* Bootloader 代码/数据(总共 128KB,包括矢量)*/
栈 (RW):原点= 0x08000000、长度= 0x00001500
RAM (RW):origin = 0x08001500、length = 0x0007EB00 /*0x00080000*//* 512KB RAM */
}

很重要

.intvecs :> vectors
.text:> bootloader
.const :> bootloader
.cinit:> bootloader

.data :> RAM
.bss :> RAM
.stack :> RAM
.sysmem :> RAM

fee_text_section:{}>引导加载程序
fe_const_section:{}>引导加载程序
fee_data_section:{}> RAM
}

以下是 FreeRTOS 应用链接器脚本内容
移动数据

矢量 (X):origin=0x00020000 length=0x00000020
内核 (RX):origin=0x00020020 length=0x00008000
FLASH0 (RX):origin=0x00028020 length=0x001D7FE0 /* 2MB - 0x8020 */
栈 (RW):origin=0x08000000 length=0x00000800
Kram (RW):origin=0x08000800 length=0x00000800
RAM (RW):origin=(0x08000800+0x00000800) length=(0x0007F800 - 0x00000800)
}

很重要

.intvecs :{}>向量
.kernelTEXT align(32):{}>内核
.cinit align (32):{}>内核
.pinit align(32):{}>内核
.text align(32):{}> FLASH0
.const align(32):{}> FLASH0
.kernelbss :{}> kram
.kernelHEAP :{}> RAM
.bss :{}> RAM
.data :{}> RAM

fee_text_section:{}> FLASH0
fe_const_section:{}> FLASH0
fee_data_section:{}> RAM
}

注意 — 您可以忽略 Fee_parameters。 没有这些参数、我就遇到了问题。

在搜索时、我看到了以下链接、

e2e.ti.com/.../tms570lc4357-bootloader---appication---application-with-freertos-fails-on-task-creation
e2e.ti.com/.../tms570lc4357-bootloader-to-application-jump-leads-to-error

在第一个链接之后、我更改了引导加载程序应用中的 hl_sys_intvecs.asm 文件、以将 SVC 中断重定向到空闲 RTOS 矢量、但实际上却是如此
无法找到“prvRaisePrivilege"的“的定义。 请确认是否需要进行 HL_sys_intvecs.asm 修改。

以下是引导加载程序的 hl_sys_intvecs.asm:
.sect “.intvecs"</s>“
.arm

--------------------------------------------------------------------------------------------
;中断例程的导入引用

.ref _c_int00
.ref phantomInterrupt
.def resetEntry

--------------------------------------------------------------------------------------------
;中断矢量

resetEntry
b _c_int00
UndefEntry
BundefEntry
movw r0、#0xFFF8;0x0001FFF8 的低 16 位
movt r0、#0x0001;0x0001FFF8 的高 16 位
BX r0
svcEntry
; b svcEntry <--替换为下面的行
;将地址 0x00020008 载入 r0
movw r0、#0x0008;低 16 位
movt r0、#0x0002;高 16 位-> 0x00020000
BX r0;分支到应用程序 SWI 处理程序
prefetchEntry
B prefetchEntry
DataEntry
b DataEntry
反相中断
LDR PC、[PC、#–0x1b0]
LDR PC、[PC、#–0x1b0]
--------------------------------------------------------------------------------------------
请注意、当我添加额外指令时、我必须为 int 提供额外的空间。 引导中的矢量就会加载
链接器脚本的修改方式如下:
移动数据

矢量 (RX):原点= 0x00000000、长度= 0x00000040
引导加载程序 (RX):origin = 0x00000040、length = 0x0001FFC0
栈 (RW):原点= 0x08000000、长度= 0x00001500
RAM (RW):origin = 0x08001500、length = 0x0007EB00 /*0x00080000*//* 512KB RAM */
}


以下是适用于免费 RTOS 应用的 hl_sys_intvecs.asm(我尚未进行任何修改):

.sect “.intvecs"</s>“
.arm

--------------------------------------------------------------------------------------------
;中断例程的导入引用

.ref _c_int00
.ref vPortSWI
.ref phantomInterrupt
.def resetEntry

--------------------------------------------------------------------------------------------
;中断矢量

resetEntry
b _c_int00
UndefEntry
BundefEntry
b vPortSWI
prefetchEntry
B prefetchEntry
DataEntry
b DataEntry
反相中断
LDR PC、[PC、#–0x1b0]
LDR PC、[PC、#–0x1b0]

--------------------------------------------------------------------------------------------


请帮助解决上述问题。 提前感谢!