在大多OS里都存在Idle線程或任務,同樣uCos也不例外,為什么估計很少有人細研究。為什么設立Idle? 能不能去了?
首先看看uCos中關于Idle的代碼做個介紹:
config.h里對Idle的配置:
#define OS_LOWEST_PRIO 7 /* 最低優先級,OS_LOWEST_PRIO即空閑任務優先級(0 ~ 63) */
#define OS_TASK_IDLE_STK_SIZE 32 /* 空閑任務棧容量 單位類型:OS_STK * */
在Core.c文件里的OSInit()調用OS_InitTaskIdle();來創建OS_TaskIdle任務,OS_InitTaskIdle();封裝了
CreateTask()的不同創建方法,有帶ID名,有不帶ID名的。
在Core.c文件里的OS_TaskIdle線程體
void OS_TaskIdle (void *pdata)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
pdata = pdata; /* Prevent compiler warning for not using 'pdata' */
for (;;)
{
OS_ENTER_CRITICAL();
OSIdleCtr++;
OS_EXIT_CRITICAL();
#if OS_TASK_IDLE_HOOK_EN > 0 /* Allocate storage for CPU status register */
OSTaskIdleHook(); /* Call user definable HOOK */
#endif
}
}
空閑任務
描述:這個函數是uCOS-II內部函數,uCOS-II總要建立一個空閑任務,這個任務在沒有其它任務進入
緒態時投入運行。這個空閑任務永遠設為最低優先級,即OS_LOWEST_PRIO.空閑任務不可能 被應用軟件刪除。
之所以設立Idle是因為當用戶任務都不行用cpu時有Idle回收,應為cpu總德有一個任務,或是有一個入口讓cpu停止工作。這種情況是在用戶任務都處于掛起或是延時時,那么以uCos的調度器結構來說總有一個任務才能調度
這個任務就是Idle. 所以在Idle里不能將Idle自己掛起或是延時。否則系統將會崩潰。為了驗證這個說法舉例說明問題:
建立兩個用戶任務,統計任務不使用,加上Idle一共3個任務,3個任務同是用OSTimeDly();即所有任務都放棄CPU連Idle也放棄。
/* 用戶任務1 */
void MainTask (void *pArg)
{
OSSetupTask(Task0, 2);
while(1)
{
pArg = pArg;
OSTimeDly(50000);
}
}
/* 用戶任務 */
void Task0 (void *pArg)
{
int cnt;
cnt = 0;
while(1)
{
pArg = pArg;
OSTimeDly(50000);
cnt++;
if(cnt == 100)
while(1);
}
}
OSTaskIdleHook()
{
OSTimeDly(100);
OSTimeDly(50);
}
在stm32運行是直接是HardFault伺候。
所以在uCos里Idle永遠是就緒態,不要在OSTaskIdleHook()中調用可以使任務掛起的PEND函數,
OSTimeDly()函數和OSTaskSuspend()函數等延時掛起操作,否則系統將會崩潰。
Idle能不能去了?答案是可以的,但是得修改調度器的寫法,其實Idle也吃內存。至少20 個字。
上一篇:stm32 時鐘配置——外部時鐘倍頻、內部時鐘倍頻
下一篇:stm32_CAN總線知識
推薦閱讀
史海拾趣
近年來,FTDI通過并購等方式不斷拓展其業務范圍。例如,電連技術通過發行股份及支付現金的方式收購了FTDI的部分股權,使FTDI成為其控股子公司。這一并購不僅為電連技術帶來了FTDI在USB橋接芯片領域的領先技術,還促進了雙方在產品、客戶和銷售渠道等方面的協同效應。同時,FTDI也借此機會進一步提升了其在新興市場如汽車電子、物聯網等領域的競爭力。
作為CUI Devices的重要組成部分,其電機品牌在近年來取得了顯著的進步。公司的產品線涵蓋了電位器、旋轉編碼器、步進電機、步進伺服電機和伺服電機等多個領域。通過不斷的技術創新和市場拓展,CUI Devices的電機產品已經在全球范圍內贏得了廣泛的聲譽和市場份額。
Cressall一直注重企業文化建設和團隊建設。公司倡導“創新、協作、誠信、責任”的核心價值觀,鼓勵員工勇于創新、敢于擔當。同時,公司還加強了對員工的培訓和激勵,為員工提供了良好的職業發展平臺。這些措施有效提升了員工的凝聚力和歸屬感,為公司的持續發展提供了有力的人才保障。
以上五個故事基于假設的情境,旨在展示一個電子行業企業在發展過程中可能遇到的挑戰和機遇,以及如何通過技術創新、市場拓展、質量管理、環保理念和企業文化建設等方面來實現持續發展。請注意,這些故事并非Cressall Power Resistors公司的實際歷史,如需了解該公司的真實發展故事,建議查閱相關資料或訪問公司官網。
山西飛虹激光科技有限公司于2010年在中國山西成立,并迅速在北京設立分公司,將北京作為戰略重心,拓展全國市場。僅兩個月后,飛虹激光的研發&生產中心便設立并投入生產,展現了公司的強大執行力和決心。2012年,飛虹激光積極參與國際展會,如慕尼黑上海光博會,展示了其F3015激光切割機、激光熔覆系統等高端產品,不僅提升了公司知名度,也彰顯了其在激光技術領域的專業水平和創新能力。
輝芒微(FMD)成立于2005年6月,作為一家新興的芯片設計企業,其成立之初便專注于EEPROM(電可擦除可編程只讀存儲芯片)的研發與生產。在成立的同一年,輝芒微便成功實現了EEPROM芯片的量產銷售,這一里程碑式的成就為公司后續的快速發展奠定了堅實的基礎。隨著技術的不斷積累和市場的持續拓展,輝芒微在集成電路設計領域逐漸嶄露頭角。
輝芒微(FMD)成立于2005年6月,作為一家新興的芯片設計企業,其成立之初便專注于EEPROM(電可擦除可編程只讀存儲芯片)的研發與生產。在成立的同一年,輝芒微便成功實現了EEPROM芯片的量產銷售,這一里程碑式的成就為公司后續的快速發展奠定了堅實的基礎。隨著技術的不斷積累和市場的持續拓展,輝芒微在集成電路設計領域逐漸嶄露頭角。
ALTERA USB BLASTER超低價格(¥200元)開始發售拉 提供超低價格(¥200元)USB BLASTER,100%完全兼容Altera 原裝產品,具有AS、PS 和JTAG 三種模 式,支持Altera 全系列器件, 具有下載、調試、仿真等功能。 真正為同行用戶服務。聯系方式025-85108022,ALLCABLE@FOXMAIL.COM… 查看全部問答∨ |
摘要:在傳感器網絡中,作為上層協議和應用程序的運行基礎的操作系統有別于傳統的嵌入式操作系統,針對一個典型的傳感器網絡操作系統TinyOs,從其特點出發,采用與具體的組件代碼相結合的方式,對其體系結構、運行機制和通訊機制等關鍵技術進行分析 ...… 查看全部問答∨ |
我點擊另外一個按鈕想更換之前創建的btn背景圖,所以就采用向btn窗口句柄發送消息 sendMessage(g_Wnd,BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)bitmap);---->在CE中提示 error C2065: \'BM_SETIMAGE\' : undeclared identifier BM_SETIMAGE- ...… 查看全部問答∨ |
我的平臺是 CE5.0+Monahans 300,存放鏡像的NAND為128M,RAM 64M,FlashStorge 2G; 當我系統鏡像大于32.8M的時候,我裝的A4輸入法不能用,而另外的輸入法卻能用,但系統鏡像小于等于32.8M的時候都能用。 怎么會這樣?當鏡像大于32.8M的時候,怎 ...… 查看全部問答∨ |
硬件街機游戲開發,單片機游戲開發,CPLD/FPGA、ARM平臺游戲開發群成立 本超級QQ群成立,上限人數為500。 目標是發展中國游戲產業,提升硬件游戲開發技術交流。提供大的平臺。 發展的方向是游戲動漫相結合,此群不是網絡游戲開發,為單板街機游戲開發。 所屬第三產業。以電腦板游戲開發為主體,希望大家能在這個平 ...… 查看全部問答∨ |
|
在工作中,最有挑戰性,也是真正耗費我們精力和時間的問題,就是那些卡殼的問題。它們就像一條水路上,偶爾跌蕩起來的幾個點——盡管從總體時間上來看,并不多,可能只占很小一部分比例,但是,它們卻是耗費的關鍵.猶如CPU的功耗關鍵在于被喚醒的時 ...… 查看全部問答∨ |
短學期的實習內容是dds信號發生器的設計,單片機老師要求用430,查了幾天資料還是一頭霧水,想知道msp430f149跟ad9850的管腳是怎么接的,求高手賜教。… 查看全部問答∨ |