gpt4 book ai didi

c - portYIELD 在 freeRTOS 中如何工作

转载 作者:行者123 更新时间:2023-11-30 15:06:19 30 4
gpt4 key购买 nike

我是 freeRTOS 的初学者,在 freeRTOS documentation taskYIELD用于请求上下文切换,taskYIELD定义如下

#define taskYIELD()                 portYIELD()

portYIELD 定义如下:

#define portYIELD()                 {__asm__ __volatile__ ("scall");}

如果我不理解这将导致系统调用异常。

在我的端口的Exception.s中,系统调用的处理如下:

.org  0x100
// Supervisor Call.
_handle_Supervisor_Call:
rjmp $

也就是说程序会进入无限循环,那么问题是程序如何跳出这个无限循环呢?如果我的理解有任何错误,请随时发表评论。

我使用 Atmel uc3a0512 和 Atmel Studio 7.0

最佳答案

您使用什么版本的 FreeRTOS?你使用什么编译器?我有版本 8.2.3 和 9.0.0。 AVR32 UC3 的两个版本都有两个移植:GCC 和 IAR。

FreeRTOS\Source\portable\GCC\AVR32_UC3\exception.S中我们可以看到:

        .org  0x100
// Supervisor Call.
_handle_Supervisor_Call:
lda.w pc, SCALLYield

对于 IAR,我们有类似的代码。所以你可以看到有SCALLYield的调用。下载最新版本并享受!

关于c - portYIELD 在 freeRTOS 中如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39178985/

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