|
相互學(xué)習(xí)一下。
單片機(jī)源程序如下:
- #include "includes.h"
- /*********************定義任務(wù)控制塊************************************************/
- static OS_TCB MENU_TCB; //定義MENU任務(wù)控制塊
- static OS_TCB RTC_TCB; //定義RTC任務(wù)控制塊
- static OS_TCB CLOCK_TCB; //定義CLOCK任務(wù)控制塊
- /********************* 定義任務(wù)棧****************************************************/
- static CPU_STK MENU_Stk[TASK_MENU_STK_SIZE]; //定義任務(wù)堆棧
- static CPU_STK RTC_Stk[TASK_RTC_STK_SIZE]; //定義任務(wù)堆棧
- static CPU_STK CLOCK_Stk[TASK_RTC_STK_SIZE]; //定義任務(wù)堆棧
- /********************* 任務(wù)函數(shù)****************************************************/
- void AppTaskStart (void *p_arg)
- {
- CPU_INT32U cpu_clk_freq; //CPU內(nèi)核時(shí)鐘
- CPU_INT32U cnts; // 根據(jù)用戶設(shè)定的時(shí)鐘節(jié)拍頻率計(jì)算 SysTick 定時(shí)器的計(jì)數(shù)值
- OS_ERR err;
- (void)p_arg;
- BSP_Init(); //板級(jí)初始化
- CPU_Init(); //初始化 CPU 組件(時(shí)間戳、關(guān)中斷時(shí)間測(cè)量和主機(jī)名)
- cpu_clk_freq = BSP_CPU_ClkFreq(); //獲取 CPU 內(nèi)核時(shí)鐘頻率(SysTick 工作時(shí)鐘)
- cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; //根據(jù)用戶設(shè)定的時(shí)鐘節(jié)拍頻率計(jì)算 SysTick 定時(shí)器的計(jì)數(shù)值
- OS_CPU_SysTickInit(cnts); //調(diào)用 SysTick 初始化函數(shù),設(shè)置定時(shí)器計(jì)數(shù)值和啟動(dòng)定時(shí)器
- // Mem_Init(); 有內(nèi)存管理代替 //初始化內(nèi)存管理組件(堆內(nèi)存池和內(nèi)存池表)
- #if OS_CFG_STAT_TASK_EN > 0u //如果使能(默認(rèn)使能)了統(tǒng)計(jì)任務(wù)
- OSStatTaskCPUUsageInit(&err); //計(jì)算沒(méi)有應(yīng)用任務(wù)(只有空閑任務(wù))運(yùn)行時(shí) CPU 的(最大)
- #endif //容量(決定 OS_Stat_IdleCtrMax 的值,為后面計(jì)算 CPU
- //使用率使用)。
- CPU_IntDisMeasMaxCurReset(); //復(fù)位(清零)當(dāng)前最大關(guān)中斷時(shí)間
-
-
- /*---------------------------------------------------------------------------------------------------------------------------------------*/
- /* 創(chuàng)建 munu 任務(wù) */
- OSTaskCreate((OS_TCB *)&MENU_TCB, //任務(wù)控制塊指針
- (CPU_CHAR *)"MENU", //任務(wù)名稱
- (OS_TASK_PTR )Task_MENU, //任務(wù)代碼指針
- (void *)0, //傳遞給任務(wù)的參數(shù)parg
- (OS_PRIO )TASK_MENU_PRIO, //任務(wù)優(yōu)先級(jí)
- (CPU_STK *)&MENU_Stk[0], //任務(wù)堆棧基地址
- (CPU_STK_SIZE)TASK_MENU_STK_SIZE/10, //堆棧剩余警戒線
- (CPU_STK_SIZE)TASK_MENU_STK_SIZE, //堆棧大小
- (OS_MSG_QTY )0, //可接收的最大消息隊(duì)列數(shù)
- (OS_TICK )0, //時(shí)間片輪轉(zhuǎn)時(shí)間
- (void *)0, //任務(wù)控制塊擴(kuò)展信息
- (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項(xiàng)
- (OS_ERR *)&err); //返回值
- /* 創(chuàng)建 RTC 任務(wù) */
- OSTaskCreate((OS_TCB *)&RTC_TCB, //任務(wù)控制塊指針
- (CPU_CHAR *)"RTC", //任務(wù)名稱
- (OS_TASK_PTR )Task_RTC, //任務(wù)代碼指針
- (void *)0, //傳遞給任務(wù)的參數(shù)parg
- (OS_PRIO )TASK_RTC_PRIO, //任務(wù)優(yōu)先級(jí)
- (CPU_STK *)&RTC_Stk[0], //任務(wù)堆棧基地址
- (CPU_STK_SIZE)TASK_RTC_STK_SIZE/10, //堆棧剩余警戒線
- (CPU_STK_SIZE)TASK_RTC_STK_SIZE, //堆棧大小
- (OS_MSG_QTY )0, //可接收的最大消息隊(duì)列數(shù)
- (OS_TICK )0, //時(shí)間片輪轉(zhuǎn)時(shí)間
- (void *)0, //任務(wù)控制塊擴(kuò)展信息
- (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項(xiàng)
- (OS_ERR *)&err); //返回值
- /* 創(chuàng)建 CLOCK 任務(wù) */
- OSTaskCreate((OS_TCB *)&CLOCK_TCB, //任務(wù)控制塊指針
- (CPU_CHAR *)"CLOCK", //任務(wù)名稱
- (OS_TASK_PTR )Task_CLOCK, //任務(wù)代碼指針
- (void *)0, //傳遞給任務(wù)的參數(shù)parg
- (OS_PRIO )TASK_CLOCK_PRIO, //任務(wù)優(yōu)先級(jí)
- (CPU_STK *)&CLOCK_Stk[0], //任務(wù)堆棧基地址
- (CPU_STK_SIZE)TASK_CLOCK_STK_SIZE/10, //堆棧剩余警戒線
- (CPU_STK_SIZE)TASK_CLOCK_STK_SIZE, //堆棧大小
- (OS_MSG_QTY )0, //可接收的最大消息隊(duì)列數(shù)
- (OS_TICK )0, //時(shí)間片輪轉(zhuǎn)時(shí)間
- (void *)0, //任務(wù)控制塊擴(kuò)展信息
- (OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務(wù)選項(xiàng)
- (OS_ERR *)&err); //返回值
- // OSTaskSuspend (&CLOCK_TCB, & err ); //掛起CLOCK
- /*------------------------------------------------------------------------------------------------------------------------------------------*/
- OSTaskDel ( 0, & err ); //刪除起始任務(wù)本身,該任務(wù)不再運(yùn)行
-
-
-
- }
- void Task_RTC(void *p_arg)
- {
- OS_ERR err;
- u8 t;
-
-
- while(1)
- {
- t=calendar.sec;
- RTC_Get();
- if(t!=calendar.sec)
- {
- t=calendar.sec;
- LCD_ShowString(20,2,80,16,16," : : ");
-
-
- LCD_ShowxNum(20,2,calendar.hour,2,16,0);//顯示數(shù)字,高位為0,還是顯示,mode:0,不填充;1,填充0.
- LCD_ShowxNum(44,2,calendar.min,2,16,0);
- LCD_ShowxNum(68,2,calendar.sec,2,16,0);
- }
-
- OSTimeDlyHMSM(0, 0,0,1,OS_OPT_TIME_HMSM_STRICT,&err);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
2.3 OSok - 菜單 -時(shí)鐘.7z
(720.42 KB, 下載次數(shù): 89)
2019-12-15 15:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|