2014-07-01 49 views
2

我一直在通過一些RTOS示例代碼會(稍微舊版本的Keil RTX的,如果任何人的興趣),我遇到了一些語法來我不解地問:C函數聲明語法 - 爲什麼這個工作?

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

這是給錯誤(錯誤: #130:預計一個「{」),所以將示例代碼更改爲:

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

並突然編譯該文件。我曾認爲函數聲明只是返回類型,名稱和參數。什麼是__task?我一直無法找到__task的定義,因爲該項目沒有正確構建地圖文件,我懷疑我也可能會丟失一個文件。

+1

也許這是一個宏嗎?如果它被定義爲'#define __task *'例如,我認爲這將編譯。 – anthropomorphic

回答

4

這不是C,它Keil編譯擴展C.

_task關鍵字告訴編譯器不添加函數入口和出口代碼

閱讀您的編譯器文檔以獲取更多信息。該計劃的

1

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

說明:

  1. 我們將使用RTX一個簡單的三個任務程序。

  2. Task1和Task2將切換兩個相應的全局變量。

  3. init任務將用於創建task1和task2,然後它將自我刪除並消失。

  4. 任務1和任務2將以循環模式永久運行。任務創建爲標準C函數。

__Task關鍵字告訴編譯器不爲任務創建入口和出口代碼。 RTX會做到這一點。

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

相關問題