日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]現(xiàn)在開始仔細(xì)分析,整個點(diǎn)燈大法是如何實(shí)現(xiàn)的。一、硬件初始化。在我這里是指對GPIO進(jìn)行初始化LED_GPIO_Config();//LED端口初始化具體的配置就不多說了。二、操作系統(tǒng)的初始化OSInit();接著我們看看這里面具體做了什

現(xiàn)在開始仔細(xì)分析,整個點(diǎn)燈大法是如何實(shí)現(xiàn)的。

一、硬件初始化。

在我這里是指對GPIO進(jìn)行初始化


LED_GPIO_Config();//LED端口初始化

具體的配置就不多說了。

二、操作系統(tǒng)的初始化

OSInit();

接著我們看看這里面具體做了什么:


voidOSInit(void)

{

OSInitHookBegin();/*Callportspecificinitializationcode*/

OS_InitMisc();/*Initializemiscellaneousvariables*/

OS_InitRdyList();/*InitializetheReadyList*/

OS_InitTCBList();/*InitializethefreelistofOS_TCBs*/

OS_InitEventList();/*InitializethefreelistofOS_EVENTs*/

OS_InitTaskIdle();/*CreatetheIdleTask*/

OS_InitTaskStat();/*CreatetheStatisticTask*/

OSInitHookEnd();/*Callportspecificinit.code*/

}

上面是去掉一些宏開關(guān)的簡化代碼:


1、首先是hook函數(shù),下面結(jié)合官方文檔以及我自己的理解,談?wù)勥@個hook函數(shù)

本人理解,對于我們初學(xué)者來說hook函數(shù)是不需要管的,直接把宏開關(guān)關(guān)掉,因?yàn)椴僮飨到y(tǒng)的功能擴(kuò)充
我們暫時還用不到,而這個hook函數(shù)就是實(shí)現(xiàn)對操作系統(tǒng)功能的擴(kuò)充,之所以加上了這個hook函數(shù),就是為了
防止我們直接修改源代碼。從而對源代碼產(chǎn)生破壞!

也就是說我們可以直接把這兩個hook函數(shù)注釋掉,自己動手試試吧,我試過了!

2、接著是這個 OS_InitMisc(); 看注釋就是初始化各種各樣的變量。我們可以進(jìn)去看看,代碼如下:

staticvoidOS_InitMisc(void)

{

#ifOS_TIME_GET_SET_EN>0

OSTime=0L;/*Clearthe32-bitsystemclock*/

#endif

OSIntNesting=0;/*Cleartheinterruptnestingcounter*/

OSLockNesting=0;/*Cleartheschedulinglockcounter*/

OSTaskCtr=0;/*Clearthenumberoftasks*/

OSRunning=OS_FALSE;/*Indicatethatmultitaskingnotstarted*/

OSCtxSwCtr=0;/*Clearthecontextswitchcounter*/

OSIdleCtr=0L;/*Clearthe32-bitidlecounter*/

#ifOS_TASK_STAT_EN>0

OSIdleCtrRun=0L;

OSIdleCtrMax=0L;

OSStatRdy=OS_FALSE;/*Statistictaskisnotready*/

#endif

}

從上面的代碼中我們可以獲得這樣的信息:


這幾行代碼完成的就是對系統(tǒng)定時器初值、中斷計(jì)數(shù)器、當(dāng)前任務(wù)數(shù)量等進(jìn)行清零,沒有別的意思了。

3、OS_InitRdyList這個函數(shù)看名字意思是初始化就緒態(tài)列表

那么就序列表指的就是任務(wù)處于三態(tài)中的就緒態(tài)的任務(wù),關(guān)于三態(tài)的詳細(xì)解釋可以百度一下!

那么還是一樣跟蹤進(jìn)去看看代碼里面到底做了些什么、


staticvoidOS_InitRdyList(void)

{

INT8Ui;

#ifOS_LOWEST_PRIO<=63

INT8U*prdytbl;

#else

INT16U*prdytbl;

#endif

OSRdyGrp=0;/*Clearthereadylist*/

prdytbl=&OSRdyTbl[0];

for(i=0;i

*prdytbl++ = 0;

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