欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
stm32f103ze,UCOSIII+菜單+時鐘任務 源程序
[打印本頁]
作者:
w1685188403
時間:
2019-12-15 15:44
標題:
stm32f103ze,UCOSIII+菜單+時鐘任務 源程序
相互學習一下。
單片機源程序如下:
#include "includes.h"
/*********************定義任務控制塊************************************************/
static OS_TCB MENU_TCB; //定義MENU任務控制塊
static OS_TCB RTC_TCB; //定義RTC任務控制塊
static OS_TCB CLOCK_TCB; //定義CLOCK任務控制塊
/********************* 定義任務棧****************************************************/
static CPU_STK MENU_Stk[TASK_MENU_STK_SIZE]; //定義任務堆棧
static CPU_STK RTC_Stk[TASK_RTC_STK_SIZE]; //定義任務堆棧
static CPU_STK CLOCK_Stk[TASK_RTC_STK_SIZE]; //定義任務堆棧
/********************* 任務函數****************************************************/
void AppTaskStart (void *p_arg)
{
CPU_INT32U cpu_clk_freq; //CPU內核時鐘
CPU_INT32U cnts; // 根據用戶設定的時鐘節拍頻率計算 SysTick 定時器的計數值
OS_ERR err;
(void)p_arg;
BSP_Init(); //板級初始化
CPU_Init(); //初始化 CPU 組件(時間戳、關中斷時間測量和主機名)
cpu_clk_freq = BSP_CPU_ClkFreq(); //獲取 CPU 內核時鐘頻率(SysTick 工作時鐘)
cnts = cpu_clk_freq / (CPU_INT32U)OSCfg_TickRate_Hz; //根據用戶設定的時鐘節拍頻率計算 SysTick 定時器的計數值
OS_CPU_SysTickInit(cnts); //調用 SysTick 初始化函數,設置定時器計數值和啟動定時器
// Mem_Init(); 有內存管理代替 //初始化內存管理組件(堆內存池和內存池表)
#if OS_CFG_STAT_TASK_EN > 0u //如果使能(默認使能)了統計任務
OSStatTaskCPUUsageInit(&err); //計算沒有應用任務(只有空閑任務)運行時 CPU 的(最大)
#endif //容量(決定 OS_Stat_IdleCtrMax 的值,為后面計算 CPU
//使用率使用)。
CPU_IntDisMeasMaxCurReset(); //復位(清零)當前最大關中斷時間
/*---------------------------------------------------------------------------------------------------------------------------------------*/
/* 創建 munu 任務 */
OSTaskCreate((OS_TCB *)&MENU_TCB, //任務控制塊指針
(CPU_CHAR *)"MENU", //任務名稱
(OS_TASK_PTR )Task_MENU, //任務代碼指針
(void *)0, //傳遞給任務的參數parg
(OS_PRIO )TASK_MENU_PRIO, //任務優先級
(CPU_STK *)&MENU_Stk[0], //任務堆棧基地址
(CPU_STK_SIZE)TASK_MENU_STK_SIZE/10, //堆棧剩余警戒線
(CPU_STK_SIZE)TASK_MENU_STK_SIZE, //堆棧大小
(OS_MSG_QTY )0, //可接收的最大消息隊列數
(OS_TICK )0, //時間片輪轉時間
(void *)0, //任務控制塊擴展信息
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務選項
(OS_ERR *)&err); //返回值
/* 創建 RTC 任務 */
OSTaskCreate((OS_TCB *)&RTC_TCB, //任務控制塊指針
(CPU_CHAR *)"RTC", //任務名稱
(OS_TASK_PTR )Task_RTC, //任務代碼指針
(void *)0, //傳遞給任務的參數parg
(OS_PRIO )TASK_RTC_PRIO, //任務優先級
(CPU_STK *)&RTC_Stk[0], //任務堆棧基地址
(CPU_STK_SIZE)TASK_RTC_STK_SIZE/10, //堆棧剩余警戒線
(CPU_STK_SIZE)TASK_RTC_STK_SIZE, //堆棧大小
(OS_MSG_QTY )0, //可接收的最大消息隊列數
(OS_TICK )0, //時間片輪轉時間
(void *)0, //任務控制塊擴展信息
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務選項
(OS_ERR *)&err); //返回值
/* 創建 CLOCK 任務 */
OSTaskCreate((OS_TCB *)&CLOCK_TCB, //任務控制塊指針
(CPU_CHAR *)"CLOCK", //任務名稱
(OS_TASK_PTR )Task_CLOCK, //任務代碼指針
(void *)0, //傳遞給任務的參數parg
(OS_PRIO )TASK_CLOCK_PRIO, //任務優先級
(CPU_STK *)&CLOCK_Stk[0], //任務堆棧基地址
(CPU_STK_SIZE)TASK_CLOCK_STK_SIZE/10, //堆棧剩余警戒線
(CPU_STK_SIZE)TASK_CLOCK_STK_SIZE, //堆棧大小
(OS_MSG_QTY )0, //可接收的最大消息隊列數
(OS_TICK )0, //時間片輪轉時間
(void *)0, //任務控制塊擴展信息
(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR), //任務選項
(OS_ERR *)&err); //返回值
// OSTaskSuspend (&CLOCK_TCB, & err ); //掛起CLOCK
/*------------------------------------------------------------------------------------------------------------------------------------------*/
OSTaskDel ( 0, & err ); //刪除起始任務本身,該任務不再運行
}
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);//顯示數字,高位為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);
}
}
復制代碼
所有資料51hei提供下載:
2.3 OSok - 菜單 -時鐘.7z
(720.42 KB, 下載次數: 89)
2019-12-15 15:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1