创建UCOS-II

创建工程步骤,
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值