久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于UCOSII的STM32源程序(信號量)
[打印本頁]
作者:
tangqi334
時間:
2018-10-19 10:41
標(biāo)題:
基于UCOSII的STM32源程序(信號量)
此文件適合于STM32上移植UCOSII系統(tǒng),通過信號量的方法創(chuàng)建程序,完成3個LED燈的閃爍。
單片機(jī)源程序如下:
/****************************************************************************
*
* 本例程在 奮斗版STM32開發(fā)板V2,2.1,V3,MINI上調(diào)試通過
*
* 文件名: app.c
* 內(nèi)容簡述:
* 本例程操作系統(tǒng)采用ucos2.86a版本, 建立了4個任務(wù)
任務(wù)名 優(yōu)先級
APP_TASK_START_PRIO 2 主任務(wù)
Task_Led1_PRIO 7 LED1 閃爍任務(wù)
Task_Led2_PRIO 8 LED2 閃爍任務(wù)
Task_Led3_PRIO 9 LED3 閃爍任務(wù)
當(dāng)然還包含了系統(tǒng)任務(wù):
OS_TaskIdle 空閑任務(wù)-----------------優(yōu)先級最低
OS_TaskStat 統(tǒng)計運行時間的任務(wù)-------優(yōu)先級次低
通過建立3個信號量,通過主任務(wù)的延時發(fā)送,控制3個led閃爍任務(wù)的響應(yīng)
*
* 文件歷史:
* 版本號 日期 作者 說明
* v0.1 2012-11-08 sun68 創(chuàng)建該文件
*
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#define GLOBALS
#include "stdarg.h"
#include "includes.h"
#include "globals.h"
OS_EVENT* Led1_SEM;
OS_EVENT* Led2_SEM;
OS_EVENT* Led3_SEM;
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
static OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];
static OS_STK Task_Led1Stk[Task_Led1_STK_SIZE];
static OS_STK Task_Led2Stk[Task_Led2_STK_SIZE];
static OS_STK Task_Led3Stk[Task_Led3_STK_SIZE];
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void App_TaskCreate(void);
static void App_TaskStart(void* p_arg);
static void Task_Led1(void* p_arg);
static void Task_Led2(void* p_arg);
static void Task_Led3(void* p_arg);
#define LED_LED1_ON() GPIO_SetBits(GPIOB, GPIO_Pin_5 ); //LED1 亮
#define LED_LED1_OFF() GPIO_ResetBits(GPIOB, GPIO_Pin_5 ); //LED1 滅
#define LED_LED2_ON() GPIO_SetBits(GPIOD, GPIO_Pin_6 ); //LED2 亮
#define LED_LED2_OFF() GPIO_ResetBits(GPIOD, GPIO_Pin_6 ); //LED2 滅
#define LED_LED3_ON() GPIO_SetBits(GPIOD, GPIO_Pin_3 ); //LED3 亮
#define LED_LED3_OFF() GPIO_ResetBits(GPIOD, GPIO_Pin_3 ); //LED3 滅
/*
*********************************************************************************************************
* main()
*
* Description : This is the standard entry point for C code. It is assumed that your code will call
* main() once you have performed all necessary initialization.
*
* Argument : none.
*
* Return : none.
*********************************************************************************************************
*/
int main(void)
{
CPU_INT08U os_err;
//禁止CPU中斷
CPU_IntDis();
//UCOS 初始化
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel". */
//硬件平臺初始化
BSP_Init(); /* Initialize BSP functions. */
//建立主任務(wù), 優(yōu)先級最高 建立這個任務(wù)另外一個用途是為了以后使用統(tǒng)計任務(wù)
os_err = OSTaskCreate((void (*) (void *)) App_TaskStart, //指向任務(wù)代碼的指針
(void *) 0, //任務(wù)開始執(zhí)行時,傳遞給任務(wù)的參數(shù)的指針
(OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], //分配給任務(wù)的堆棧的棧頂指針 從頂向下遞減
(INT8U) APP_TASK_START_PRIO); //分配給任務(wù)的優(yōu)先級
//ucos的節(jié)拍計數(shù)器清0 節(jié)拍計數(shù)器是0-4294967295 對于節(jié)拍頻率100hz時, 每隔497天就重新計數(shù)
OSTimeSet(0);
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II). */
/* Start multitasking (i.e. give control to uC/OS-II). */
return (0);
}
/*
*********************************************************************************************************
* App_TaskStart()
*
* Description : The startup task. The uC/OS-II ticker should only be initialize once multitasking starts.
*
* Argument : p_arg Argument passed to 'App_TaskStart()' by 'OSTaskCreate()'.
*
* Return : none.
*
* Caller : This is a task.
*
* Note : none.
*********************************************************************************************************
*/
static void App_TaskStart(void* p_arg)
{
(void) p_arg;
//初始化ucos時鐘節(jié)拍
OS_CPU_SysTickInit(); /* Initialize the SysTick. */
//使能ucos 的統(tǒng)計任務(wù)
#if (OS_TASK_STAT_EN > 0)
//----統(tǒng)計任務(wù)初始化函數(shù)
OSStatInit(); /* Determine CPU capacity. */
#endif
//建立其他的任務(wù)
App_TaskCreate();
while (1)
{
//1秒一次循環(huán)
OSSemPost(Led1_SEM);
OSTimeDlyHMSM(0, 0,0, 300);
OSSemPost(Led2_SEM);
OSTimeDlyHMSM(0, 0,0, 500);
OSSemPost(Led3_SEM);
OSTimeDlyHMSM(0, 0,0,350);
}
}
//LED1閃爍任務(wù)----------------------------------------
static void Task_Led1(void* p_arg)
{
INT8U err;
(void) p_arg;
while (1)
{
OSSemPend(Led1_SEM,0,&err); //等待Led1信號量
LED_LED1_ON();
LED_LED2_OFF();
LED_LED3_OFF();
OSTimeDlyHMSM(0, 0,0, 200);
}
}
//LED2閃爍任務(wù)----------------------------------------
static void Task_Led2(void* p_arg)
{
INT8U err;
(void) p_arg;
while (1)
{
OSSemPend(Led2_SEM,0,&err); //等待Led2信號量
LED_LED2_ON();
LED_LED1_OFF();
LED_LED3_OFF();
OSTimeDlyHMSM(0, 0,0, 300);
}
}
//LED3閃爍任務(wù)----------------------------------------
static void Task_Led3(void* p_arg)
{ INT8U err;
(void) p_arg;
while (1)
{
OSSemPend(Led3_SEM,0,&err); //等待Led3信號量
LED_LED3_ON();
LED_LED1_OFF();
LED_LED2_OFF();
OSTimeDlyHMSM(0, 0,0,200);
}
}
/*
*********************************************************************************************************
* App_TaskCreate()
*
* Description : Create the application tasks.
*
* Argument : none.
*
* Return : none.
*
* Caller : App_TaskStart().
*
* Note : none.
*********************************************************************************************************
*/
static void App_TaskCreate(void)
{
//CPU_INT08U os_err;
Led1_SEM=OSSemCreate(1); //建立Led1的信號量
Led2_SEM=OSSemCreate(1); //建立Led2的信號量
Led3_SEM=OSSemCreate(1); //建立Led3的信號量
//LED1 閃爍任務(wù)------------------------------------------------------
OSTaskCreateExt(Task_Led1,(void *)0,(OS_STK *)&Task_Led1Stk[Task_Led1_STK_SIZE-1],Task_Led1_PRIO,Task_Led1_PRIO,(OS_STK *)&Task_Led1Stk[0],
Task_Led1_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
//LED2 閃爍任務(wù)------------------------------------------------------
OSTaskCreateExt(Task_Led2,(void *)0,(OS_STK *)&Task_Led2Stk[Task_Led2_STK_SIZE-1],Task_Led2_PRIO,Task_Led2_PRIO,(OS_STK *)&Task_Led2Stk[0],
Task_Led2_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
//LED3 閃爍任務(wù)------------------------------------------------------
OSTaskCreateExt(Task_Led3,(void *)0,(OS_STK *)&Task_Led3Stk[Task_Led3_STK_SIZE-1],Task_Led3_PRIO,Task_Led3_PRIO,(OS_STK *)&Task_Led3Stk[0],
Task_Led3_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
}
/*
*********************************************************************************************************
*********************************************************************************************************
* uC/OS-II APP HOOKS
*********************************************************************************************************
*********************************************************************************************************
*/
#if (OS_APP_HOOKS_EN > 0)
/*
*********************************************************************************************************
* TASK CREATION HOOK (APPLICATION)
*
* Description : This function is called when a task is created.
*
* Argument : ptcb is a pointer to the task control block of the task being created.
*
* Note : (1) Interrupts are disabled during this call.
*********************************************************************************************************
*/
void App_TaskCreateHook(OS_TCB* ptcb)
{
}
/*
*********************************************************************************************************
* TASK DELETION HOOK (APPLICATION)
*
* Description : This function is called when a task is deleted.
*
* Argument : ptcb is a pointer to the task control block of the task being deleted.
*
* Note : (1) Interrupts are disabled during this call.
*********************************************************************************************************
*/
void App_TaskDelHook(OS_TCB* ptcb)
{
(void) ptcb;
}
/*
*********************************************************************************************************
* IDLE TASK HOOK (APPLICATION)
*
* Description : This function is called by OSTaskIdleHook(), which is called by the idle task. This hook
* has been added to allow you to do such things as STOP the CPU to conserve power.
*
* Argument : none.
*
* Note : (1) Interrupts are enabled during this call.
*********************************************************************************************************
*/
#if OS_VERSION >= 251
void App_TaskIdleHook(void)
{
}
#endif
/*
*********************************************************************************************************
* STATISTIC TASK HOOK (APPLICATION)
*
* Description : This function is called by OSTaskStatHook(), which is called every second by uC/OS-II's
* statistics task. This allows your application to add functionality to the statistics task.
*
* Argument : none.
*********************************************************************************************************
*/
void App_TaskStatHook(void)
{
}
/*
*********************************************************************************************************
* TASK SWITCH HOOK (APPLICATION)
*
* Description : This function is called when a task switch is performed. This allows you to perform other
* operations during a context switch.
*
* Argument : none.
*
* Note : 1 Interrupts are disabled during this call.
*
* 2 It is assumed that the global pointer 'OSTCBHighRdy' points to the TCB of the task that
* will be 'switched in' (i.e. the highest priority task) and, 'OSTCBCur' points to the
* task being switched out (i.e. the preempted task).
*********************************************************************************************************
*/
#if OS_TASK_SW_HOOK_EN > 0
void App_TaskSwHook(void)
{
}
#endif
/*
*********************************************************************************************************
* OS_TCBInit() HOOK (APPLICATION)
*
* Description : This function is called by OSTCBInitHook(), which is called by OS_TCBInit() after setting
* up most of the TCB.
*
* Argument : ptcb is a pointer to the TCB of the task being created.
*
* Note : (1) Interrupts may or may not be ENABLED during this call.
*********************************************************************************************************
*/
#if OS_VERSION >= 204
void App_TCBInitHook(OS_TCB* ptcb)
{
(void) ptcb;
}
#endif
#endif
復(fù)制代碼
所有資料51hei提供下載:
STM32-LED閃爍-信號量.rar
(382.15 KB, 下載次數(shù): 21)
2018-10-19 10:40 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
三级视频在线
|
国产精品福利在线
|
国产午夜影院
|
日韩不卡在线观看
|
色一区二区三区
|
黄色免费大片
|
欧美日韩一二三区
|
色老板免费视频
|
免费在线成人网
|
欧美亚洲在线
|
懂色av一区二区三区
|
91亚洲国产成人精品性色
|
成人国产精品久久久网站
|
成人综合网站
|
中文字幕免费av
|
美日韩在线
|
成人一级片
|
亚洲免费在线
|
亚洲精品18在线观看
|
日韩免费一区
|
亚洲精品观看
|
中文字幕在线免费看线人
|
国内福利视频
|
一区二区三区在线观看免费
|
日韩欧美在线一区
|
www.国产一区
|
久草视频在线播放
|
五月婷婷网
|
日本伊人网
|
国产一区在线视频
|
成人免费福利视频
|
天天射影院
|
国产一区二区影院
|
亚洲一区在线播放
|
国产永久免费视频
|
在线免费看毛片
|
久久久久久久免费视频
|
a级毛毛片
|
日韩免费视频一区二区
|
欧美三级韩国三级日本三斤在线观看
|
黄大色黄大片女爽一次
|