C函数声明语法 - 为什么这样做?

时间:2014-07-01 19:15:39

标签: c syntax rtos keil

我一直在浏览一些RTOS示例代码(Keil RTX的稍微旧版本,如果有人感兴趣的话),我遇到了一些我不理解的语法:

void job1 (void) __task;
void job2 (void) __task;

这是错误的(错误:#130:期望为“{”),因此将示例代码更改为:

void __task job1 (void);
void __task job2 (void);

然后突然编译了文件。我原以为函数声明只是返回类型,名称和参数。什么是__task?我无法找到__task的定义,因为项目没有正确构建地图文件,我怀疑我可能也错过了一个文件。

2 个答案:

答案 0 :(得分:4)

它不是C,它是C的Keil编译器扩展。

_task关键字告诉编译器不要添加函数入口和退出代码

阅读编译器文档以获取更多信息。

答案 1 :(得分:1)

http://www.sase.com.ar/2012/files/2012/09/RLarmSteps.pdf

该计划的描述:

  1. 我们将使用RTX创建一个简单的三任务程序。

  2. Task1和Task2将切换两个相应的全局变量。

  3. init任务将用于创建task1和task2,然后它将自行删除并消失。

  4. Task1和Task2将永远以循环模式顺序运行。任务创建为标准C函数。

  5. __Task关键字告诉编译器不要为任务创建入口和出口代码。 RTX会这样做。

    (谷歌搜索:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=__task%20keyword%20c%20rtos