英飞凌
直播中

李继明

7年用户 1098经验值
私信 关注

编写一个任务调度程序,在上下文切换后遇到了一些问题求解

大家好,
我正在编写一个任务调度程序,在上下文切换后遇到了一些问题。
为下一个任务恢复上下文后:
__builtin_tricore_mtcr_by_name("pcxi", lower_context);    __builtin_tricore_isync();    ULONG psw = __builtin_tricore_mfcr_by_name("psw");    psw  = ~(PSW_CDE_MASK);    __builtin_tricore_mtcr_by_name("psw", psw);    __builtin_tricore_isync();      __asm("rslcx");    __asm("rfe");
"rfe" 调用正确的任务函数。 但"rfe" 不会在 A[11] 寄存器中设置新的返回地址。 当任务函数以"ret16" 结束时,µC 将在陷阱中运行。
我在上下文切换的准备过程中错过了什么?
在上下文切换/"rfe" 之后,A[11] 的正确行为是什么?
谢谢!

回帖(1)

木頭瓶子

2024-5-22 17:42:30


1. 确保您的任务调度程序正确地保存和恢复寄存器状态。在上下文切换时,需要保存当前任务的寄存器状态,并在恢复时加载新任务的寄存器状态。

2. 检查您的中断处理程序。确保在上下文切换时正确地处理中断,避免在切换过程中触发中断导致意外的行为。

3. 确保您的任务调度程序遵循正确的同步机制。在多任务环境中,需要确保任务之间的同步和互斥,以避免竞态条件和死锁。

4. 使用调试工具和技术来帮助您找到问题所在。例如,您可以使用断点、日志记录和性能分析工具来检查程序的行为。

5. 如果可能的话,尝试简化您的任务调度程序,逐步添加功能,以便更容易地找到问题所在。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分