liteos內(nèi)核

任務(wù)一:

本實(shí)驗(yàn)中將創(chuàng)建兩個(gè)任務(wù),一個(gè)低優(yōu)先級(jí)任務(wù)task1,一個(gè)高優(yōu)先級(jí)任務(wù)task2,兩個(gè)任務(wù)都會(huì)每隔2s在串口打印自己的任務(wù)id號(hào),在串口終端中觀(guān)察兩個(gè)任務(wù)的運(yùn)行情況。

首先打開(kāi) HelloWorld 工程,在Demo文件夾右擊,選擇新建文件夾:



新建osal_kernel_demo文件夾,用于存放內(nèi)核的實(shí)驗(yàn)文件:



接下來(lái)在此osal_kernel_demo文件夾中新建第一個(gè)實(shí)驗(yàn)文件osal_task_demo.c文件,添加以下代碼:



編寫(xiě)完成之后,要將我們編寫(xiě)的osal_task_demo.c文件添加到makefile中,加入整個(gè)工程的編譯。

這里有個(gè)較為簡(jiǎn)單的方法,直接修改Demo文件夾下的user_demo.mk配置文件,添加代碼:



這段代碼的意思是:



如果 CONFIG_USER_DEMO 宏定義的值是osal_task_demo,則將osal_task_demo.c文件加入到makefile中進(jìn)行編譯。

那么,如何配置 CONFIG_USER_DEMO 宏定義呢?在工程根目錄下的.sdkconfig文件中的末尾即可配置:



程序燒錄之后,即可看到程序已經(jīng)開(kāi)始運(yùn)行,在串口終端中可看到實(shí)驗(yàn)的輸出內(nèi)容:



系統(tǒng)啟動(dòng)后,首先打印版本號(hào),串口shell的優(yōu)先級(jí)為10。最先打印shell信息,接下來(lái)task1先創(chuàng)建,但是優(yōu)先級(jí)較低,所以后創(chuàng)建的task2搶占執(zhí)行,task2獲取到互斥鎖,對(duì)共享資源進(jìn)行操作,操作完畢解鎖,然后主動(dòng)掛起,task1獲取到互斥鎖,對(duì)共享資源進(jìn)行另一個(gè)操作,操作完畢解鎖,在task1操作的時(shí)候,task2早已掛起完畢,但是獲取不到互斥鎖,所以?huà)炱鸬却?,在task1解鎖后,堵塞的task2被喚醒開(kāi)始執(zhí)行。

任務(wù)二:

在osal_kernel_demo文件夾中新建一個(gè)實(shí)驗(yàn)文件 osal_mem_demo.c,打開(kāi)新建實(shí)驗(yàn)文件并編寫(xiě)如下代碼:





修改Demo文件夾下的user_demo.mk配置文件,添加如下代碼





配置 CONFIG_USER_DEMO 宏定義:





程序燒錄之后,即可看到程序已經(jīng)開(kāi)始運(yùn)行,在串口終端中可看到實(shí)驗(yàn)的輸出內(nèi)容:



可以看到,系統(tǒng)啟動(dòng)后,首先打印版本號(hào),串口shell的優(yōu)先級(jí)為10,最先打印shell信息,接下來(lái)task1先創(chuàng)建,但是優(yōu)先級(jí)較低,所以后創(chuàng)建的task2搶占執(zhí)行,task2獲取到互斥鎖,對(duì)共享資源進(jìn)行操作,操作完畢解鎖,然后主動(dòng)掛起,task1獲取到互斥鎖,對(duì)共享資源進(jìn)行另一個(gè)操作,操作完畢解鎖,在task1操作的時(shí)候,task2早已掛起完畢,但是獲取不到互斥鎖,所以?huà)炱鸬却?,在task1解鎖后,堵塞的task2被喚醒開(kāi)始執(zhí)行。

實(shí)驗(yàn)3:

在osal_kernel_demo文件夾中新建一個(gè)實(shí)驗(yàn)文件 osal_mem_demo.c,并打開(kāi)文件夾,填寫(xiě)如下代碼:



編寫(xiě)完成之后,將編寫(xiě)的 osal_mem_demo.c文件添加到makefile中,加入整個(gè)工程進(jìn)行編譯。

修改Demo文件夾下的user_demo.mk配置文件,添加如下代碼:



配置 CONFIG_USER_DEMO 宏定義,在工程根目錄下的.sdkconfig文件中的末尾即可配置:



程序燒錄之后,即可看到程序已經(jīng)開(kāi)始運(yùn)行,在串口終端中可看到實(shí)驗(yàn)的輸出內(nèi)容:



可以看到,系統(tǒng)啟動(dòng)后,首先打印版本號(hào),串口shell的優(yōu)先級(jí)為10,最先打印shell信息,接下來(lái)內(nèi)存申請(qǐng)任務(wù)創(chuàng)建開(kāi)始執(zhí)行,在該芯片上最大能申請(qǐng)的空間為 16384 字節(jié)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本次內(nèi)容主要以 為主, 、 、 、 、 ,以及 , 及 。在 中,一個(gè)任務(wù)就是一個(gè)線(xiàn)程,多個(gè)任務(wù)按照優(yōu)先級(jí)進(jìn)行搶占...
    窺菏閱讀 2,044評(píng)論 1 0
  • LiteOS內(nèi)核 1.LiteOS內(nèi)核的任務(wù)管理 首先打開(kāi) HelloWorld 工程,在Demo文件夾右擊,選擇...
    周爺爺fjv閱讀 376評(píng)論 0 0
  • 任務(wù)一: 本實(shí)驗(yàn)中將創(chuàng)建兩個(gè)任務(wù),一個(gè)低優(yōu)先級(jí)任務(wù)task1,一個(gè)高優(yōu)先級(jí)任務(wù)task2,兩個(gè)任務(wù)都會(huì)每隔2s在串...
    李現(xiàn)豪閱讀 392評(píng)論 0 0
  • 漸變的面目拼圖要我怎么拼? 我是疲乏了還是投降了? 不是不允許自己墜落, 我沒(méi)有滴水不進(jìn)的保護(hù)膜。 就是害怕變得面...
    悶熱當(dāng)乘涼閱讀 4,494評(píng)論 0 13
  • 夜鶯2517閱讀 128,189評(píng)論 1 9

友情鏈接更多精彩內(nèi)容