久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32 UOSII系統任務調度源碼
[打印本頁]
作者:
hg1234
時間:
2018-8-23 15:37
標題:
STM32 UOSII系統任務調度源碼
UCOSII系統建立了兩個優先級不同的任務
通過設置任務間的延時實時調度任務
寄存器版程序驗證OK
例如優先級別為64
系統空閑任務為最低優先級64-1
統計任務優先級為64-2
任務堆棧
堆棧為后進先出,先進后出
任務創建時應該依據處理堆棧的生長方向(向上生長【低地址在下】和向下生長【低地址在上】)
M3的棧生長方向為高地址向低地址增長即向上增長的
棧的地址是從頂端開始傳遞的
優先級使用
0 1 2 3 OS_LOWEST_PRIO-3 OS_LOWEST_PRIO-2 OS_LOWEST_PRIO-1 OS_LOWEST_PRIO
開發者:h
stm32單片機源程序如下:
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "includes.h"
/////////////////////////UCOSII任務設置///////////////////////////////////
//START 任務
//設置任務優先級
#define START_TASK_PRIO 10 //開始任務的優先級設置為最低
//設置任務堆棧大小
#define START_STK_SIZE 64
//任務堆棧
OS_STK START_TASK_STK[START_STK_SIZE];
//任務函數
void start_task(void *pdata);
//LED0任務
//設置任務優先級
#define LED0_TASK_PRIO 6
//設置任務堆棧大小
#define LED0_STK_SIZE 64
//任務堆棧
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任務函數
void led0_task(void *pdata);
//LED1任務
//設置任務優先級
#define LED1_TASK_PRIO 7
//設置任務堆棧大小
#define LED1_STK_SIZE 64
//任務堆棧
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任務函數
void led1_task(void *pdata);
//LED2任務
//設置任務優先級
#define LED2_TASK_PRIO 8
//設置任務堆棧大小
#define LED2_STK_SIZE 64
//任務堆棧
OS_STK LED2_TASK_STK[LED2_STK_SIZE];
//任務函數
void led2_task(void *pdata);
//LED3任務
//設置任務優先級
#define LED3_TASK_PRIO 9
//設置任務堆棧大小
#define LED3_STK_SIZE 64
//任務堆棧
OS_STK LED3_TASK_STK[LED3_STK_SIZE];
//任務函數
void led3_task(void *pdata);
//任務函數解析
//OSTimeTick() 系統服務函數 時鐘節拍函數
//OSTimeTickHook() 時鐘節拍外連函數
//OSTimeDly() OSTimeDlyHMSM() 任務延時函數
//OSTaskStat() 統計時間運行任務 用來計算CPU使用率
//OSStatInit() 系統統計初始化函數
//OS_TaskIdle() 空閑任務
//OS_TaskStat() 統計任務
//TickTask() 時鐘節拍任務
//OSTickISR() 時鐘節拍中斷服務函數
//OSVersion() 獲取UCOS的版本號
//OSTaskDel(OS_PRIO_SELF) 任務刪除
//OSTaskCreateExt 任務創建擴展函數
//OSTaskStkChk() 堆棧檢驗函數
int main(void)
{
Stm32_Clock_Init(9); //系統時鐘設置
delay_init(72); //延時初始化
uart_init(72,9600); //初始化串口
// LED_Init();
LED_Init(); //初始化與LED連接的硬件接口
OSInit();
OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//創建起始任務
OSStart();
}
//開始任務
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata = pdata;
OSSysTickInit();
OS_ENTER_CRITICAL(); //進入臨界區(無法被中斷打斷)
OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
OSTaskCreate(led2_task,(void *)0,(OS_STK*)&LED2_TASK_STK[LED2_STK_SIZE-1],LED2_TASK_PRIO);
OSTaskCreate(led3_task,(void *)0,(OS_STK*)&LED3_TASK_STK[LED3_STK_SIZE-1],LED3_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO); //掛起起始任務.
OS_EXIT_CRITICAL(); //退出臨界區(可以被中斷打斷)
}
/***************************************/
void delay(u16 tt)
{
u16 kk;
while(tt--)
{
for(kk=0;kk<8000;kk++)
;
}
}
//LED0任務
void led0_task(void *pdata)
{
while(1)
{
OSTimeDly(2);//自身延時函數 OSTimeDlyHMSM()表示等待狀態
/* LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
printf("按鍵1已經按下\r\n"); */
if(KEY22==0)
{
delay_ms(10);
if(KEY22==0)
{
while(KEY22==0);
delay_ms(10);
while(KEY22==0);
Uart1_PutString("按鍵1已經按下\r\n");
}
}
};
}
//LED1任務
void led1_task(void *pdata)
{
while(1)
{
OSTimeDly(2);
switch(FLAG_YY)
{
case 1:printf("任務2成功實現\r\n");FLAG_YY=0;break;
case 2:printf("22任務成功實現\r\n");FLAG_YY=0;break;
case 3:printf("33任務成功實現\r\n");FLAG_YY=0;break;
default:break;
}
/* LED1=0;
delay_ms(300);
LED1=1;
printf("按鍵已經按下\r\n");
delay_ms(300); */
/* if(KEY_K==0)
{
delay_ms(10);
if(KEY_K==0)
{
while(KEY_K==0);
delay_ms(10);
while(KEY_K==0);
printf("按鍵2已經按下\r\n");
}
} */
};
}
//LED2任務
void led2_task(void *pdata)
{
while(1)
{
OSTimeDly(2);
if(KEY_K==0)
{
delay_ms(10);
if(KEY_K==0)
{
while(KEY_K==0);
delay_ms(10);
while(KEY_K==0);
printf("led 狀態反轉\r\n");
}
}
/* LED1=0;
delay_ms(300);
LED1=1;
printf("按鍵已經按下\r\n");
delay_ms(300); */
/* if(KEY_K==0)
{
delay_ms(10);
if(KEY_K==0)
{
while(KEY_K==0);
delay_ms(10);
while(KEY_K==0);
printf("按鍵2已經按下\r\n");
}
} */
};
}
//LED3任務
void led3_task(void *pdata)
{
while(1)
{
OSTimeDly(2);
if(KEY11==0)
{
delay_ms(10);
if(KEY11==0)
{
while(KEY11==0);
delay_ms(10);
while(KEY11==0);
printf("led1 狀態反轉\r\n");
}
}
/* LED1=0;
delay_ms(300);
LED1=1;
printf("按鍵已經按下\r\n");
delay_ms(300); */
/* if(KEY_K==0)
{
delay_ms(10);
if(KEY_K==0)
{
while(KEY_K==0);
delay_ms(10);
while(KEY_K==0);
printf("按鍵2已經按下\r\n");
}
} */
};
}
復制代碼
所有資料51hei提供下載:
STM32UCOSII 任務調度.rar
(402.17 KB, 下載次數: 13)
2018-8-23 18:13 上傳
點擊文件名下載附件
ucosii 任務調度
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色录像一级片
|
一区二区不卡视频
|
9l视频自拍九色9l视频成人
|
免费国产精品视频
|
中国免费毛片
|
国产一级特黄aaa大片
|
一区二区三区国产精品
|
精品久久久久久久久久久久久久久久
|
亚洲天堂免费视频
|
激情久久网
|
精品99视频
|
免费在线小视频
|
国产日韩在线视频
|
欧美成人性生活视频
|
亚洲在线观看视频
|
五月天在线观看
|
黄色大片在线免费观看
|
国产成人一区二区
|
午夜视频在线免费观看
|
欧美日韩在线一区二区三区
|
性视频网址
|
一级黄色片免费观看
|
中文字幕超清在线观看
|
日韩欧美大片
|
三级视频在线
|
亚洲精品成人在线
|
成年人一级片
|
成人午夜在线视频
|
午夜aaa
|
成人免费视频网址
|
福利在线观看
|
亚洲黄色精品
|
日韩三级精品
|
亚洲欧美日韩色图
|
久久九九热
|
国产精品伦子伦免费视频
|
在线免费播放av
|
欧美激情在线播放
|
久久av红桃一区二区小说
|
国产在线视频91
|
天天操天天拍
|