我正在 Xilinx UltraScale+ ZCU102 设备上为 RPU 编写一个应用程序,需要在 FreeRTOS 中运行一些任务。我的应用程序首先创建一个“启动”任务,然后创建其余的任务。成功创建启动任务并调用 vTaskStartScheduler() 后,启动任务未运行。
我注意到 FreeRTOS 常见问题解答页面 ( http://www.freertos.org/FAQHelp.html ) 说:
如果您创建的项目正在编译,并且至少执行到调度程序启动为止,但在调用 vTaskStartScheduler() 后只有一个任务正在执行或根本没有任务正在执行,那么很可能是中断向量表不正确。
所以我首先检查以确保中断向量表是正确的。我使用的是 FreeRTOS 10.0,它是作为 ZCU102 BSP 的一部分构建的。
在使用 BSP 创建的文件“port_asm_vectors.S”中,我有
// port_asm_vectors.S
...
.section .vectors,"a"
_vector_table:
ldr pc,=_boot
ldr pc,=Undefined
ldr pc, _swi
ldr pc,=PrefetchAbortHandler
ldr pc,=DataAbortHandler
NOP /* Placeholder for address exception vector*/
ldr pc, _irq
ldr pc,=FIQHandler
_irq: .word FreeRTOS_IRQ_Handler
_swi: .word FreeRTOS_SWI_Handler
...
Run Code Online (Sandbox Code Playgroud)
在我的应用程序的链接描述文件中,我有以下内容
// lscript.ld
...
SECTIONS
{
.vectors : {
KEEP (*(.vectors))
*(.boot)
} > …Run Code Online (Sandbox Code Playgroud)