创建工程步骤,
1.新建一个ucos_demo文件夹,
2. 在ucos_demo文件夹下面创建user 文件夹(模块进行驱动)、task文件夹(存放任务用)
3.拷贝cmsis 文件夹到ucos_demo文件夹下,拷贝ucosii 文件夹到ucos_demo文件夹下,
4.打开软件、新建工程、保存工程、选取芯片型号,
5.配置虚拟文件(cmsis、ucosii、user、task)
6、配置魔术棒
7、新建一个main.c保存到src中;新建一个task.h保存在task中;新建一个start_task.c保存在task中。
8、添加main.c、task.h、start_task.c到工程(.h文件的添加只是为了方便更改里面的内容,容易找到文件)
创建一个任务
INT8U OSTaskCreate (void (*task) (void *p_arg) ,
void *p_arg,
os_STK *ptos,
INT8U prio)
函数功能:创建一个任务
函数形参:
void (*task) (void *p_arg): 函数指针;任务函数指针;存放任务函数名。
void *p_arg:指针;万能指针;用来传递参数给任务函数的。一般用NULL。
os_STK *ptos:任务栈指针;存放任务栈的地址;栈顶的地址。
ARM处理器栈顶使用的是数组中的最后一个存储空间填写的是数组中最后一个元素的地址。
任务栈最小需要17* 4字节空间。最大值不限,根据实际情况使用多少就填写多少。
INT8U prio:任务优先级。就是填写一个数值。但是这个数值有限制:0-255;正常情况下应该是:0-OS_LOWEST_PRIO;优先级中的0~3,一般情况下不使用。
创建任务的时候最好间隔几个优先级,方便以后添加功能的时候有相应的空闲优先级。
函数返回值:OS_ERR_NONE:创建成功
OS_ERRPRIO_EXIST:该优先级的任务存在
OS_ERRPRIO_INVALID:优先级编号超过了OS_LOWEST_PRIO
OS_ERRTASK_CREATEISR:在中断中创建任务
注意:中断中不允许创建任务
任务管理
INT80 OS_TaskchangePrio (INT8U oldprio,
工NT8U newprio)
函数功能:改变任务的优先级
函数形参:
oldprio:旧的优先级
newprio:新的优先级
函数返回值:
OS_ERR_NONE:返回成功
工NT8UosTaskcreateExt (void (*task》(void *p_arg) ,
void *p_arg,
OS_STK *ptos,
工NT8U prio,
工NT16U id,
OS_STK *pbos,
工NT32U stk_size,
void *pext,
工NT16U opt)
函数功能:创建一个任务-----扩展方式创建
函数形参:
void(*task)(void *p_arg) :
void*p_arg:
OS_STK *ptos;
工NT8U prio;
INT16U id:给任务一个ID号,这个并没有实际意义,可以随意给。
OS_STK *pbos:任务栈底:填任务栈数组名即可。
INT32U stk_size:任务栈大小。
void*pext:TCB扩展功能;如果不用直接写个NULL。
INT16u opt:
OS_TASK_OPT_STK_CHK:检查任务栈使用情况。
任务栈一般控制在40%~60%之间。
INT8U OSTaskDel (INT8U prio)
函数功能:删除一个任务
函数形参:
prio:任务的优先级;
OS_PRIO_SELF:表示删除的是当前优先级任务。
函数返回值:使用该函数一股不会去删除其它任务,只会删除当前任务。
工NT8U OSTaskDelReq (工NT8U prio)
函数功能:请求删除一个任务
函数形参:
prio:任务的优先级;
OS_PRIO_SELF:表示删除的是当前优先级任务。函数返回值:
工NT8uosTaskNameGet (INT8U prio,
INT8U **pname,
INT8U *perr)
函数功能:获取一个任务的名字
void OSTaskNameset (INT8U prio,
工NT8U *pname ,
INT8U *perr)
函数功能:设置一个任务的名字
工NT8U OSTaskResume (INT8U prio)
函数功能:解除被挂起的任务函数形参:
prio:任务的优先级;
工NT8U OSTaskSuspend(工NT8U prio)
函数功能:挂起一个任务
函数形参:prio:任务的优先级;
OS_PRIO_SELF:表示挂起的是当前优先级任务。
OS_STK_DATA *p_stk_data:保存的任务栈使用情况的结果。
typedef struct OS_stk_data {INT32U OSEree;/*Number of free bytes on the stack */
INT32U OSuseg;/*Number of bytes used on the stack */
} OS_STK_DATA;
工NT8U OSTaskQuery (INT8U prio,OS_TCB *p_task_data)
函数功能:任务函数相关信息保存查询
函数形参:prio:任务的优先级:OSPRIO_SELF:表示当前优先级任务。
OS_TCB *p_task_data:任务的相关信息
INT32U OSTaskRegcet (INT8U prio,
INT8U id,
INT8U *perr)
函数功能:获取一个任务的ID
void OSTaskRegset (INT8Uprio,
INT8U id,
INT32U value,
INT8U *perr)
函数功能:设置一个任务的ID