sem_wait:直阻塞等待直信号量>0
sem_timedwait:阻塞等待若干间直信号量>0
sem_post:使信号量加1
sem_destroy:释放信号量sem_init应 答案补充 关于各函数具体参数请用man查看,man sem_init查看该函数帮助
1、首先需要知道,μC/OS-II中创建任务的函数有两个: OSTaskCreate()和OSTaskCreateExt()(1)OSTaskCreate() //创建普通任务
由于重点在下面的创建扩展任务函数,故本函数就不多说了!确实,要想实现检测目标任务栈实际使用情况的功能,是不能使用这个函数来创建目标任务的,必须使用OSTaskCreateExt() 。
(2)OSTaskCreateExt() //创建扩展任务
函数接口原型为:
#if OS_TASK_CREATE_EXT_EN >0
INT8U OSTaskCreateExt
(
void (*task)(void *pd), //建立扩展任务(任务代码指针
void *pdata, //传递参数指针
OS_STK *ptos, //分配任务堆栈栈顶指针
INT8U prio, //分配任务优先级
INT16U id, //(未来的)优先级标识(与优先级相同)
OS_STK *pbos, //分配任务堆栈栈底指针
INT32U stk_size, //指定堆栈的容量(检验用)
void *pext, //指向用户附加的数据域的指针
INT16U opt //建立任务设定选项
)
#endif
2、其次需要知道μC/OS-II中有这么个函数:OSTaskStkChk()
不错,检测任务堆栈实际使用情况正是用的这个函数,下面来本函数的接口原型:
INT8U OSTaskStkChk
(
INT8U prio, //待测任务的优先级
OS_STK_DATA *pdata //指向一个类型为OS_STK_DATA的结构体
)
3、再次需要知道一个结构体:
#if OS_TASK_CREATE_EXT_EN >0
typedef struct
{
INT32U OSFree//堆栈中未使用的字节数
INT32U OSUsed//堆栈中已使用的字节数
} OS_STK_DATA
#endif
参数: prio 为指定要获取堆栈信息的任务优先级,也可以指定参数OS_PRIO_SELF,获取调用任务本身的
信息。
pdata 指向一个类型为OS_STK_DATA的数据结构,其中包含如下信息:
INT32U OSFree// 堆栈中未使用的字节数
INT32U OSUsed// 堆栈中已使用的字节数
不是信号量的问题printf函数,是先写到输出缓冲,遇到\n时,或者缓冲区满时,或者有强制输出(fflush)时,才会将缓冲区里的内容输出到屏幕上(标准输出设备:stdout)。你的代码里面并没有以上3个触发条件的任意一种,所以printf的内存没有实际输出到屏幕上。
你只要在每个printf函数后面加上fflush(stdout)就可以了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)