一、任務的創建
任務創建函數:OSTaskCreate()
void OSTaskCreate ( OS_TCB *p_tcb,//指向任務的任務控制塊
CPU_CHAR *p_name,//任務名字
OS_TASK_PTR p_task,//任務函數名字
void *p_arg,//傳遞給任務的參數
OS_PRIO prio,//任務優先級
CPU_STK *p_stk_base,//任務堆棧基地址
CPU_STK_SIZE stk_limit,//任務堆棧深度
CPU_STK_SIZE stk_size,//任務堆棧大小
OS_MSG_QTY q_size,//可選消息隊列
OS_TICK time_quanta,//使能時間片輪轉調度,默認時鐘節拍除以10
void *p_ext,//指向用戶補充的存儲區
OS_OPT opt,//任務的特定選項
OS_ERR *p_err)//保存錯誤碼
①首先要定義每個任務的優先級、棧大小、任務控制塊及堆棧
//任務優先級
#define START_TASK_PRIO 3
//任務堆棧大小
#define START_STK_SIZE 512
//任務控制塊
OS_TCB StartTaskTCB;
//任務堆棧
CPU_STK START_TASK_STK[START_STK_SIZE];
//任務函數 申明
void start_task(void *p_arg);
②編寫主函數,首先是外部功能函數的初始化,然后初始化UCOSIII,再創建開始任務(在創建開始任務之前必須調用進入臨界區函數,創建完后還要退出臨界區,然后開啟UCOIII),創建開始任務的傳參既是自己宏定義的一些參數。
int main(void)
{
OS_ERR err;//錯誤值:都是宏定義,根據對應數值找到返回錯誤值代表的意思
CPU_SR_ALLOC();
delay_init(168); //時鐘初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷分組配置
uart_init(115200); //串口初始化
LED_Init(); //LED初始化
OSInit(&err); //初始化UCOSIII
OS_CRITICAL_ENTER();//進入臨界區
//創建開始任務
OSTaskCreate((OS_TCB * )&StartTaskTCB, //任務控制塊
(CPU_CHAR * )"start task", //任務名字
(OS_TASK_PTR )start_task, //任務函數
(void * )0, //傳遞給任務函數的參數
(OS_PRIO )START_TASK_PRIO, //任務優先級
(CPU_STK * )&START_TASK_STK[0], //任務堆棧基地址
(CPU_STK_SIZE)START_STK_SIZE/10, //任務堆棧深度限位
(CPU_STK_SIZE)START_STK_SIZE, //任務堆棧大小
(OS_MSG_QTY )0, //任務內部消息隊列能夠接收的最大消息數目,為0時禁止接收消息
(OS_TICK )0, //當使能時間片輪轉時的時間片長度,為0時為默認長度,
(void * )0, //用戶補充的存儲區
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務選項
(OS_ERR * )&err); //存放該函數錯誤時的返回值
OS_CRITICAL_EXIT(); //退出臨界區
OSStart(&err); //開啟UCOSIII
while(1);
}
③主函數調用創建開始任務函數后就應編寫開始任務函數的功能函數,開始任務函數內同樣是調用功能函數,原理同上,接著寫功能函數所要實現的功能。
//開始任務函數
void start_task(void *p_arg)
{
OS_ERR err;
CPU_SR_ALLOC();
p_arg = p_arg;
CPU_Init();
#if OS_CFG_STAT_TASK_EN > 0u
OSStatTaskCPUUsageInit(&err); //統計任務
#endif
#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了測量中斷關閉時間
CPU_IntDisMeasMaxCurReset();
#endif
#if OS_CFG_SCHED_ROUND_ROBIN_EN //當使用時間片輪轉的時候
//使能時間片輪轉調度功能,時間片長度為1個系統時鐘節拍,既1*5=5ms
OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif
OS_CRITICAL_ENTER(); //進入臨界區
//創建LED0任務
OSTaskCreate((OS_TCB * )&Led0TaskTCB,
(CPU_CHAR * )"led0 task",
(OS_TASK_PTR )led0_task,
(void * )0,
(OS_PRIO )LED0_TASK_PRIO,
(CPU_STK * )&LED0_TASK_STK[0],
(CPU_STK_SIZE)LED0_STK_SIZE/10,
(CPU_STK_SIZE)LED0_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
//創建LED1任務
OSTaskCreate((OS_TCB * )&Led1TaskTCB,
(CPU_CHAR * )"led1 task",
(OS_TASK_PTR )led1_task,
(void * )0,
(OS_PRIO )LED1_TASK_PRIO,
(CPU_STK * )&LED1_TASK_STK[0],
(CPU_STK_SIZE)LED1_STK_SIZE/10,
上一篇:UCOSIII時間片輪轉調度器
下一篇:UCOIII中任務的調度和切換
推薦閱讀
史海拾趣
在快速發展的同時,Brilliance公司始終關注社會責任和可持續發展。公司積極參與公益事業,為社會做出貢獻。同時,公司還注重環保和節能減排,努力降低生產過程中的環境影響。這種積極履行社會責任的態度也贏得了社會各界的廣泛認可。
通過以上五個故事,我們可以看到Brilliance公司在電子行業發展中的艱辛與輝煌。憑借技術創新、市場拓展、產業鏈整合以及社會責任等方面的努力,Brilliance成功地在電子行業中樹立了自己的品牌形象,并為未來的發展奠定了堅實的基礎。
Crystek公司成立于1958年,自創立之初,就致力于成為射頻微波和頻率控制行業的高性能技術領導者。創業初期,Crystek公司憑借其敏銳的市場洞察力和前瞻性的技術視野,成功開發了一系列高質量的頻率產品,包括石英晶振、時鐘振蕩器(XO)等,逐漸在市場中樹立起了良好的口碑。通過不斷的努力和創新,Crystek公司逐漸在電子行業中嶄露頭角,贏得了客戶的信任和認可。
隨著產品的不斷完善,ELMEC開始考慮如何進一步拓展市場。然而,國際市場的競爭異常激烈,ELMEC的產品面臨著來自各大跨國公司的挑戰。為了打開市場,李明帶領團隊深入調研,了解客戶需求,不斷優化產品性能。同時,他們還積極參加各類國際展會,與潛在客戶建立聯系。經過幾年的努力,ELMEC的產品逐漸獲得了市場的認可,銷售額也穩步增長。
隨著新能源汽車市場的快速發展,銓力公司看到了新的發展機遇。于是,公司開始布局新能源汽車領域,研發和生產新能源汽車所需的電源和充電設備。通過不斷創新和拓展市場,銓力在新能源汽車領域也取得了顯著的成績,為公司的發展注入了新的動力。
這五個故事展示了銓力(ALLPOWER)公司在電子行業中的發展歷程和取得的成就。從創立初期的太陽能電源產品研發,到技術突破和產品升級,再到國際市場的拓展和產業鏈整合,以及新能源汽車領域的布局,銓力始終保持著創新的精神和進取的態度,不斷推動著公司的發展。
在全球節能意識日益增強的背景下,DIALIGHT致力于推動綠色照明的發展。公司的LED產品具有高效節能、長壽命和環保等優點,有助于減少能源消耗和環境污染。此外,DIALIGHT還積極參與各種綠色照明項目,為推動可持續發展貢獻自己的力量。
隨著技術的不斷成熟和市場的日益擴大,Econais開始將目光投向全球市場。公司積極參加各類國際展會和研討會,與全球各地的客戶和合作伙伴建立聯系。同時,Econais還針對不同地區的市場需求,推出定制化的產品和解決方案。這些努力使得Econais在全球范圍內的市場份額逐漸擴大。
本文介紹了一些足以表現出一個晶體振蕩器性能高低的技術指標,了解這些指標的含義,將有助于通訊設計工程師順利完成設計項目,同時也可以大大減少整機生產廠家的采購成本。 … 查看全部問答∨ |
|
多年的FPGA設計,感覺FPGA設計關鍵掌握通用語言描述模型,理解硬件描素語言。然后對應用深刻的理解,并轉化為工程實現的語言。由于FPGA的靈活性和其并行運行的特點。個人認為FPGA以后發展可能完全取代其他各類芯片。… 查看全部問答∨ |
我的硬件是PXA270 通過16位數據總線連接到64MBYTE的FLASH P33,地址總線是26位 p33是由兩塊32M的flash組成的,在程序中不能同時訪問上下兩塊FLASH的地址 而是需要有一個地址總線,即最高位的A25作為內部片選,選擇當前訪問的是BOTTOM 還是top flas ...… 查看全部問答∨ |
我用的TI的DM642DSP和BCM5221以太網芯片,進行連網 采用UDP協議,報文頭: typedef union { Uint8 Bytes[6]; Uint16 Words[3]; }MacAddr; // Ethernet Header #define ETHHDR_SIZE&nbs ...… 查看全部問答∨ |
|
在照明行業,人們對于LED光源的調光往往有個誤區,即認為對比其他光源(熒光燈,金鹵燈和鈉燈等)的調光LED相對容易的多。而現實是LED光源調光技術在工程中的應用中往往不盡人意,為什么會是這樣的情形?是LED光源的調光 ...… 查看全部問答∨ |
哪些手段確保FPGA外部芯片提供的數據準確無誤地進入FPGA內部? 通常采用哪些手段確保FPGA外部芯片(比如ad芯片,存儲器讀數據時)提供的數據準確無誤地進入FPGA內部? \0\0\0eeworldpostqq… 查看全部問答∨ |
“芯靈思”免費送開發板活動第三期(9.15~9.21)及第二期中獎結果公布!! 本帖最后由 芯靈思 于 2014-9-14 23:41 編輯 “芯靈思”攜手“EEWorld”開展免費送開發板活動,于2014年9月1號開始,每周評獎一次,停止時間另行通知。趕緊喊你的小伙伴一起上!!人多機會大!!1、活動周期:每周評獎一次 (本期:9月15日00:00~9月 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析