gpt4 book ai didi

embedded - blackfin bf561 FreeRTOS 实现在加载任务时在运行时失败

转载 作者:行者123 更新时间:2023-12-04 16:00:43 27 4
gpt4 key购买 nike

我已经从代码中实现了 Blackfin BF561 coreB FreeRTOS:

http://www.freertos.org/index.html?http://interactive.freertos.org/forums/79366-analog-devices

我使用 gcc 转换为裸机作为 elf 可执行文件。

我很接近,但我有一个我无法弄清楚的运行时错误。当调度程序启动并尝试触发第一个任务时,内存指针丢失并且它不会启动第一个堆栈,而是在第一个任务内启动一个函数,并在退出函数时丢失。

这是相应的调试日志:

COREB: end setup LED                                                            
COREB: handler declared
COREB: Initialise New TCB:NewTCB address: 3d01000
COREB: TopofStask: 0, pxTopOfStack = 3d0263c
COREB: pxTaskCode =3c033a0, pvParameters = 0
COREB: returned pxNewTCB->pxTopOfStack = 3d02588
COREB: task created:
COREB: top of stack: 3d02588
COREB: GenericListItem: 0
COREB: Event ListItem: 9
COREB: Priority: 1
COREB: start of stack: 3d02000
COREB: Task Name: BootTas
COREB: TCB number: 0
COREB: Task Tag: 0
COREB: Add the idle task at the lowest priority
COREB: Initialise New TCB:NewTCB address: 3d03000
COREB: TopofStask: 0, pxTopOfStack = 3d0431c
COREB: pxTaskCode =3c0295c, pvParameters = 0
COREB: returned pxNewTCB->pxTopOfStack = 3d04268
COREB: task created:
COREB: top of stack: 3d04268
COREB: GenericListItem: 0
COREB: Event ListItem: a
COREB: Priority: 0
COREB: start of stack: 3d04000
COREB: Task Name: IDLE
COREB: TCB number: 1
COREB: Task Tag: 0
COREB: end Add the idle task at the lowest priority
COREB: if xReturn == 1, and xReturn = 1
COREB: before disable interupt
COREB: after disable interupt
COREB: before xPortStartScheduler
COREB: start xPortStartScheduler fn before set core timer
COREB: after ContextSwitch interupt flag
COREB: before prvSetupTimerInterrupt
COREB: after prvSetupTimerInterupt
COREB: Task Switch context called
COREB: The scheduler is running
COREB: trace switched out TCB:ff700bf8
COREB: name of switch out task:efore xPortStartScheduler

COREB: before Task first check for stack overflow
COREB: Task first check for stack overflow called
COREB: Task second check for stack overflow called
COREB: before call get owner of next entry
COREB: get owner of next entry:
COREB: current TCB 3d01000
COREB: pxReadyTasksLists[ uxTopReadyPriority ] = 1
COREB: TCB content:
COREB: top of stack: 3d02588
COREB: GenericListItem: 0
COREB: Event ListItem: 9
COREB: Priority: 1
COREB: start of stack: 3d02000
COREB: Task Name: BootTas
COREB: TCB number: 0
COREB: Task Tag: 0
COREB: trace switched in:BootTas
COREB: write trace to buffer
COREB: task increment tick: 1
COREB: end of app init
COREB: execption 2b addr ff700be4
COREB: coreb dump stack
COREB: found fp: ff700b64

这是我在模拟设备论坛上开始的讨论:

http://ez.analog.com/message/38669#38669

最佳答案

好的,我终于解决了这个问题。问题是汇编代码没有从带有RTI的vContext代码中断函数返回,而是直接进入下一个汇编代码函数,这是具有相同问题的定时器中断,因此堆栈指针正在运行到下一个地址,它恰好是 app_init 函数的起始地址.....

问题可能是由于 RTI 语句是在 vContextSwitch 函数调用的 MACRO 中进行的,我不确定。

我通过将这些汇编函数转换为 C 函数来修复它,现在从中断返回的堆栈正常工作并且问题得到解决。请注意,在调用 vContextSwitch 时忘记了调度程序中的钩子(Hook)任务加载器函数以及从未记录在任务上下文中的钩子(Hook)函数的标记之后,发现了额外的错误。

现在都修好了。

最好的祝福,

威廉

关于embedded - blackfin bf561 FreeRTOS 实现在加载任务时在运行时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8550538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com