當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]4. uCOS配置uCOS是可裁減實(shí)時(shí)操作系統(tǒng),可以根據(jù)實(shí)際的應(yīng)用對(duì)內(nèi)核未使用到的功能進(jìn)行裁減,以進(jìn)一步節(jié)省系統(tǒng)寶貴的硬件資源,通??捎玫膗COS-II內(nèi)核代碼在6K~26K,這在uCOS-II配置文件os_cfg.h中進(jìn)行配置,這個(gè)配置文

4. uCOS配置

uCOS是可裁減實(shí)時(shí)操作系統(tǒng),可以根據(jù)實(shí)際的應(yīng)用對(duì)內(nèi)核未使用到的功能進(jìn)行裁減,以進(jìn)一步節(jié)省系統(tǒng)寶貴的硬件資源,通常可用的uCOS-II內(nèi)核代碼在6K~26K,這在uCOS-II配置文件os_cfg.h中進(jìn)行配置,這個(gè)配置文件在源碼目錄為os_cfg_r.h,從目錄中拷貝添加到uCOS/uCOS-II/Cfg目錄中,并重命名為os_cfg.h。

#ifndef OS_CFG_H

#define OS_CFG_H

/* ---------------------------- MISCELLANEOUS -------------------------- */

#define OS_CFG_APP_HOOKS_EN 1u /* Enable/Disable application specific hooks*/

#define OS_CFG_ARG_CHK_EN 1u /*Enable/Disable argument checking*/

#define OS_CFG_CALLED_FROM_ISR_CHK_EN 1u /* check for called from ISR*/

#define OS_CFG_DBG_EN1u /* Enable (1) debugcode/variables */

#define OS_CFG_ISR_POST_DEFERRED_EN0u /* Enable/Disable DeferredISR posts */

#define OS_CFG_OBJ_TYPE_CHK_EN 1u /* Enable/Disable object typechecking*/

#define OS_CFG_TS_EN 1u /* Enable/Disable timestamping*/

#define OS_CFG_PEND_MULTI_EN 1u /* code generation formulti-pend feature */

#define OS_CFG_PRIO_MAX 32u /* maximum number of taskpriorities */

#define OS_CFG_SCHED_LOCK_TIME_MEAS_EN1u /* code to measure schedulerlock time */

#define OS_CFG_SCHED_ROUND_ROBIN_EN 1u /* code for Round-Robinscheduling */

#define OS_CFG_STK_SIZE_MIN 64u /* Minimum allowable taskstack size */

/* ----------------------------- EVENT FLAGS --------------------------- */

#define OS_CFG_FLAG_EN 1u /* Enable/Disable code forEVENT FLAGS*/

#define OS_CFG_FLAG_DEL_EN 0u /* Include code forOSFlagDel()*/

#define OS_CFG_FLAG_MODE_CLR_EN 0u /* code for Wait on ClearEVENT FLAGS*/

#define OS_CFG_FLAG_PEND_ABORT_EN 0u /* Include code forOSFlagPendAbort()*/

/* -------------------------- MEMORY MANAGEMENT ------------------------ */

#define OS_CFG_MEM_EN1u /* code generation for MEMORYMANAGER */

/* --------------------- MUTUAL EXCLUSION SEMAPHORES ------------------- */

#define OS_CFG_MUTEX_EN 1u /* code generation for MUTEX*/

#define OS_CFG_MUTEX_DEL_EN 0u /* code for OSMutexDel()*/

#define OS_CFG_MUTEX_PEND_ABORT_EN0u /* code for OSMutexPendAbort()*/

/* --------------------------- MESSAGE QUEUES -------------------------- */

#define OS_CFG_Q_EN 1u /* code generation for QUEUES*/

#define OS_CFG_Q_DEL_EN 0u /* Include code forOSQDel()*/

#define OS_CFG_Q_FLUSH_EN 0u /* Include code forOSQFlush()*/

#define OS_CFG_Q_PEND_ABORT_EN1u /* Include code forOSQPendAbort()*/

/* ----------------------------- SEMAPHORES ---------------------------- */

#define OS_CFG_SEM_EN 1u/* code generation for SEMAPHORES */

#define OS_CFG_SEM_DEL_EN 0u /* Include code forOSSemDel()*/

#define OS_CFG_SEM_PEND_ABORT_EN1u /* Include code forOSSemPendAbort()*/

#define OS_CFG_SEM_SET_EN 1u /* Include code forOSSemSet()*/

/* -------------------------- TASK MANAGEMENT -------------------------- */

#define OS_CFG_STAT_TASK_EN 1u /* Enable/Disable thestatistics task*/

#define OS_CFG_STAT_TASK_STK_CHK_EN1u /* Check task stacks fromstatistic task*/

#define OS_CFG_TASK_CHANGE_PRIO_EN 1u /* Include code forOSTaskChangePrio()*/

#define OS_CFG_TASK_DEL_EN 0u /* Include code forOSTaskDel()*/

#define OS_CFG_TASK_Q_EN 1u /* Include code forOSTaskQXXXX()*/

#define OS_CFG_TASK_Q_PEND_ABORT_EN0u /* Include code forOSTaskQPendAbort()*/

#define OS_CFG_TASK_PROFILE_EN 1u /* variables in OS_TCB forprofiling */

#define OS_CFG_TASK_REG_TBL_SIZE 1u /* Number of task specificregisters*/

#define OS_CFG_TASK_SEM_PEND_ABORT_EN1u /* Include code forOSTaskSemPendAbort()*/

#define OS_CFG_TASK_SUSPEND_EN 1u /* OSTaskSuspend() and OSTaskResume()*/

/* -------------------------- TIME MANAGEMENT -------------------------- */

#define OS_CFG_TIME_DLY_HMSM_EN 1u /* Include code forOSTimeDlyHMSM()*/

#define OS_CFG_TIME_DLY_RESUME_EN0u /* Include code forOSTimeDlyResume()*/

/* ------------------- TASK LOCAL STORAGE MANAGEMENT ------------------- */

#define OS_CFG_TLS_TBL_SIZE 0u /* code for Task LocalStorage (TLS) registers */

/* ------------------------- TIMER MANAGEMENT -------------------------- */

#define OS_CFG_TMR_EN 1u /*Enable/Disablecode generation for TIMERS */

#define OS_CFG_TMR_DEL_EN 0u /*Enable/Disable code generation for OSTmrDel()*/

#endif

5. 用戶代碼

用戶需要提供一個(gè)周期性定時(shí)中斷作為uCOS-II的運(yùn)行Tick,每個(gè)Tick需調(diào)用OSTimeTick()來讓內(nèi)核管理時(shí)鐘節(jié)拍,在s3c2416用定時(shí)器4產(chǎn)生這個(gè)系統(tǒng)Tick。在main()函數(shù)中需調(diào)用OSInit()初始化內(nèi)核,創(chuàng)建任務(wù)后,再調(diào)用OSStart()把cpu管理權(quán)交給內(nèi)核。內(nèi)核即可正確地管理用戶的任務(wù)。

#include "s3c2416.h"

#include "Exception.h"

#include "ucos_ii.h"

// IO port for controling LEDs

#define LED2 (13) // GPE13 LED2

#define LED3 (11) // GPE11 LED3

#define LED4 (13) // GPL13 LED4

#define LED5 (12) // GPE12 LED5

#define LED6 (2) // GPG2 LED6

OS_STKTaskStartStk[TASK_START_STK_SIZE];

OS_STK Task1Stk[TASK1_STK_SIZE];

OS_STK Task2Stk[TASK2_STK_SIZE];

OS_STK Task3Stk[TASK3_STK_SIZE];

static void Timer4_IRQ(void)

{

OSTimeTick(); // uCOS時(shí)鐘節(jié)拍管理

rSRCPND1 |= (0x01 <

rINTPND1 |= (0x01 <

}

void Timer4_Start()

{

rTCON |= (0x1 << 20); // 定時(shí)器開啟

}

void Timer4_Stop()

{

rTCON &= ~(0x1 << 20);// 定時(shí)器停止

}

void Timer4_Init()

{

// 定時(shí)器4時(shí)鐘頻率為PCLK(66.66666M)/(0+1)/16=4.166MHZ

rTCFG1 &= ~(0xf << 16);

rTCFG1 |= (0x3 << 16); // Timer4 16分頻

rTCFG0 &= ~(0xff << 8);

rTCFG0 |= (0 << 8); // PCLK預(yù)分頻為1

rTCNTB4 = 4166; // System Tick設(shè)1ms

rTCON |= (0x1 << 21); // 更新計(jì)數(shù)值

rTCON &= ~(0x1 << 21);// 清除

rTCON |= (0x1 << 22); // 自動(dòng)重裝載

IRQ_Register(INT_TIMER4,Timer4_IRQ); // 注冊(cè)Timer4中斷函數(shù)

rINTMOD1 &= ~(1 <

rINTMSK1 &= ~(1 <

}

void Gpio_LED2(unsigned char On)

{

if (!On) {

rGPEDAT &=~(1<

} else {

rGPEDAT |= (1<

}

}

void Gpio_LED3(unsigned char On)

{

if (!On) {

rGPEDAT &=~(1<

} else {

rGPEDAT |= (1<

}

}

void Gpi

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉