📄 ucos_app.c
字号:
/*
*********************************************************************************************************
*
* EXAMPLE CODE
* uC/OS-II 2.84在LPC2400实验板上的范例程序
* 本程序的各种配置在app_cfg.h文件
*
* Filename : uCOS_app.c
* Version : V1.00
* Programmer(s) : HuangJianhua
* Time : 2008-01-11
*********************************************************************************************************
*/
#include <includes.h>
#include "type.h"
#include "target.h" /* 目标板驱动 */
#include "bsp.h" /* BSP,包括中断初始化和串口驱动等 */
#include "fio.h" /* Led驱动 */
/*
*********************************************************************************************************
* 常量定义
*********************************************************************************************************
*/
#define OS_VIEW_MODULE 1 /* 启用OS_VIEW */
/*
*********************************************************************************************************
* 本地变量
*********************************************************************************************************
*/
static OS_STK AppTaskStartStk[APP_TASK_START_STK_SIZE]; /*任务堆栈 */
static OS_STK AppTaskLEDStk[APP_TASK_LED_STK_SIZE];
/*
*********************************************************************************************************
* 本地函数原型
*********************************************************************************************************
*/
static void AppTaskStart (void *p_arg);
static void AppTaskLed (void *p_arg);
#if OS_VIEW_MODULE > 0
static void AppTerminalRx (CPU_INT08U rx_data);
#endif
/*
*********************************************************************************************************
* main()
*
*********************************************************************************************************
*/
void main (void)
{
CPU_INT08U err;
TargetResetInit(); /* 目标板初始化 */
GPIOInit(3,1,1); /* Led初始化 */
Ser_Init (); /* 串口初始化 */
Ser_Printf("\r\nuC/OS-II now start running ... \r\n");
BSP_IntDisAll(); /* 禁用中断,直到OS启用 */
OSInit(); /* uC/OS-II初始化 */
OSTaskCreateExt(AppTaskStart, /* 建立初始任务 */
(void *)0,
(OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1],
APP_TASK_START_PRIO,
APP_TASK_START_PRIO,
(OS_STK *)&AppTaskStartStk[0],
APP_TASK_START_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
#if OS_TASK_NAME_SIZE > 13
OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err); /* 任务命名 */
#endif
OSStart(); /* 开始多任务调度 */
}
/*
*********************************************************************************************************
* STARTUP TASK
*
* Description : 这是一个初始任务范例,它启动其它任务,并在串口上打印提示信息。
* 系统节拍tick必须在这里,也就是多任务开始以后启动。
*
* Arguments : p_arg 是一个参数 passed to 'AppStartTask()' by 'OSTaskCreate()'.
*
* Returns : none
*
* Notes : 程序的第一行只是为了防止出现编译警告。编译器不会为它产生任何代码。
*********************************************************************************************************
*/
static void AppTaskStart (void *p_arg)
{
(void)p_arg;
CPU_INT32U delay0;
BSP_Init(); /* 在BSP初始化时进行系统节拍tick初始化 */
#if OS_TASK_STAT_EN > 0
OSStatInit(); /* 启动系统统计任务 */
#endif
#if OS_VIEW_MODULE > 0
OSView_Init(115200); /* OSView 初始化, baud rate = 115200 */
OSView_TerminalRxSetCallback(AppTerminalRx);
OSView_RxIntEn(); /* 启动接收中断 */
#endif
/******************************************* 创建其它任务在这里实现 *************************************/
OSTaskCreateExt(AppTaskLed, /* 第二个任务建立 */
(void *)0,
(OS_STK *)&AppTaskLEDStk[APP_TASK_LED_STK_SIZE - 1],
APP_TASK_Led_PRIO,
APP_TASK_Led_PRIO,
(OS_STK *)&AppTaskLEDStk[0],
APP_TASK_LED_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
/************************************ 本任务实体,必须写成一个无穷循环 **********************************/
while (DEF_TRUE)
{
Ser_Printf("This is a uC/OS-II test, Task 1 .\r\n");
delay0 = 1000;
OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
}
}
/*
*********************************************************************************************************
* LED TASK
*
* Description : 单纯的LED和串口提示
*
* Arguments : p_arg is the argument passed to 'AppStartKbd()' by 'OSTaskCreate()'.
*
* Returns : none
*********************************************************************************************************
*/
static void AppTaskLed (void *p_arg)
{
(void)p_arg;
CPU_INT08U i;
CPU_INT32U delay0;
delay0 = 100;
while(1)
{
Ser_Printf("This is a uC/OS-II test, Task 2 .\r\n");
for (i = 1; i <= 4; i++)
{
LedOn(i);
OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
LedOff(i);
OSTimeDlyHMSM(0, 0, delay0 / 1000, delay0 % 1000);
}
OSTimeDly(OS_TICKS_PER_SEC / 10);
}
}
/*
*********************************************************************************************************
* uC/OS-VIew 终端窗口回显
*
* Description : 这是uC/OS-View的回显函数。如果有需要就自己写。
*
* Arguments : rx_data是接收到的数据
*
* Returns : none
*********************************************************************************************************
*/
#if OS_VIEW_MODULE > 0
static void AppTerminalRx (CPU_INT08U rx_data)
{
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -