我一直在浏览一些RTOS示例代码(Keil RTX的稍微旧版本,如果有人感兴趣的话),我遇到了一些我不理解的语法:
void job1 (void) __task;
void job2 (void) __task;
这是错误的(错误:#130:期望为“{”),因此将示例代码更改为:
void __task job1 (void);
void __task job2 (void);
然后突然编译了文件。我原以为函数声明只是返回类型,名称和参数。什么是__task?我无法找到__task的定义,因为项目没有正确构建地图文件,我怀疑我可能也错过了一个文件。
答案 0 :(得分:4)
它不是C,它是C的Keil编译器扩展。
_task
关键字告诉编译器不要添加函数入口和退出代码。
阅读编译器文档以获取更多信息。
答案 1 :(得分:1)
http://www.sase.com.ar/2012/files/2012/09/RLarmSteps.pdf
该计划的描述:
我们将使用RTX创建一个简单的三任务程序。
Task1和Task2将切换两个相应的全局变量。
init任务将用于创建task1和task2,然后它将自行删除并消失。
Task1和Task2将永远以循环模式顺序运行。任务创建为标准C函数。
__Task关键字告诉编译器不要为任务创建入口和出口代码。 RTX会这样做。