|
STM32下的UCOSII移植,親測有效!
程序:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "includes.h"
//START 任務(wù)
//設(shè)置任務(wù)優(yōu)先級
#define START_TASK_PRIO 10 ///開始任務(wù)的優(yōu)先級為最低
//設(shè)置任務(wù)堆棧大小
#define START_STK_SIZE 128
//任務(wù)任務(wù)堆棧
OS_STK START_TASK_STK[START_STK_SIZE];
//任務(wù)函數(shù)
void start_task(void *pdata);
//LED0任務(wù)
//設(shè)置任務(wù)優(yōu)先級
#define LED0_TASK_PRIO 7
//設(shè)置任務(wù)堆棧大小
#define LED0_STK_SIZE 128
//任務(wù)堆棧
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任務(wù)函數(shù)
void led0_task(void *pdata);
//LED1任務(wù)
//設(shè)置任務(wù)優(yōu)先級
#define LED1_TASK_PRIO 6
//設(shè)置任務(wù)堆棧大小
#define LED1_STK_SIZE 128
//任務(wù)堆棧
OS_STK LED1_TASK_STK[LED1_STK_SIZE];
//任務(wù)函數(shù)
void led1_task(void *pdata);
//浮點(diǎn)測試任務(wù)
#define FLOAT_TASK_PRIO 5
//設(shè)置任務(wù)堆棧大小
#define FLOAT_STK_SIZE 128
//任務(wù)堆棧
//如果任務(wù)中使用printf來打印浮點(diǎn)數(shù)據(jù)的話一點(diǎn)要8字節(jié)對齊
__align(8) OS_STK FLOAT_TASK_STK[FLOAT_STK_SIZE];
//任務(wù)函數(shù)
void float_task(void *pdata);
int main(void)
{
delay_init(168); //延時初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷分組配置
uart_init(115200); //串口波特率設(shè)置
LED_Init(); //LED初始化
OSInit(); //UCOS初始化
OSTaskCreate(start_task,(void*)0,(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO); //創(chuàng)建開始任務(wù)
OSStart(); //開始任務(wù)
}
//開始任務(wù)
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
OSStatInit(); //開啟統(tǒng)計任務(wù)
OS_ENTER_CRITICAL(); //進(jìn)入臨界區(qū)(關(guān)閉中斷)
OSTaskCreate(led0_task,(void*)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);//創(chuàng)建LED0任務(wù)
OSTaskCreate(led1_task,(void*)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);//創(chuàng)建LED1任務(wù)
OSTaskCreate(float_task,(void*)0,(OS_STK*)&FLOAT_TASK_STK[FLOAT_STK_SIZE-1],FLOAT_TASK_PRIO);//創(chuàng)建浮點(diǎn)測試任務(wù)
OSTaskSuspend(START_TASK_PRIO);//掛起開始任務(wù)
OS_EXIT_CRITICAL(); //退出臨界區(qū)(開中斷)
}
//LED0任務(wù)
void led0_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(100);
}
}
//LED1任務(wù)
void led1_task(void *pdata)
{
while(1)
{
LED1=0;
delay_ms(300);
LED1=1;
delay_ms(300);
}
}
//浮點(diǎn)測試任務(wù)
void float_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
static float float_num=0.01;
while(1)
{
float_num+=0.01f;
OS_ENTER_CRITICAL(); //進(jìn)入臨界區(qū)(關(guān)閉中斷)
printf("float_num的值為: %f\r\n",float_num); //串口打印結(jié)果
OS_EXIT_CRITICAL(); //退出臨界區(qū)(開中斷)
delay_ms(500);
}
}
|
-
-
STM32下的UCOSII移植.7z
2020-6-28 04:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
366.19 KB, 下載次數(shù): 19, 下載積分: 黑幣 -5
|