关心"有没有") 消息队列:用于数据传输(关心"是什么") 使用信号量的场景 1.资源保护(互斥锁) OS_SEM mutex_sem; void task1(void *p_arg) { OSSemPend.../ 访问共享资源(如全局变量、外设) OSSemPost(&mutex_sem, OS_OPT_POST_1, &err); } void task2(void *p_arg) { OSSemPend.../ 完成某些工作 OSSemPost(&sync_sem, OS_OPT_POST_1, &err); // 通知任务B } void task_b(void *p_arg) { OSSemPend...OSSemCreate(&resource_sem, "Buffer Pool", 5, &err); // 5个缓冲区 } void consumer_task(void *p_arg) { OSSemPend...display_task(void *p_arg) { sensor_data_t *p_data; OS_MSG_SIZE size; while(1) { OSSemPend
OS_SEM)-1; OS_EXIT_CRITICAL(); return OS_OK; } } /*这个是一个不完全精确的实现*/ /*申请信号量*/ /*其超时时间不会非常精确*/ int8 OSSemPend...testSem; void task6(void * arg) { testSem=OSSemCreate(1); //创建一个信号量 while(1 ) { OSSemPend...* arg) { testQ=OSQCreate();//创建一个消息队列 testSem=OSSemCreate(1); //创建一个信号量 while(1 ) { OSSemPend...;/*100毫秒10个*/ } } void task3(void * arg) { int i=0; char buf[]={1,2,3,4,5}; while(1 ) { OSSemPend...AppTaskDelay);/*100毫秒10个*/ } } void task4(void * arg) { char* s; while(1 ) { OSSemPend
使用二值信号量的过程:创建二值信号量 -> 释放二值信号量 -> 获取二值信号量 函数 描述 OSSemCreate() 创建一个信号量 OSSemDel() 删除一个信号量 OSSemPend() 获取信号量资源...OS_ERR * p_err //指向接收错误代码变量的指针 ) OS_SEM_CTR 类型返回值为信号量资源数更新后的值 OSSemPend...():获取信号量 OS_SEM_CTR OSSemPend( OS_SEM * p_sem, //指向信号量结构体的指针 OS_TICK timeout
1) 创建信号量OS_EVENT *OSSemCreate (INT16U cnt) 2)请求信号量 OSSempend
(4)当一个任务运行的时候,只有在信号量有效的时候,才能得到内存块,一旦信号量有效了,就可以申请内存块并且使用它,儿没有必要对OSSemPend()返回的错误代码进行检查。...{ INT8U err; INT8U *pblock; for(;;) { //这里使用了我请求一个信号后,然后我才释放掉一个信号量 OSSemPend
} } /* 在高优先级任务A中 */ void Task_HighPri(void *p_arg) { while(1) { OSSemPend(&MySem, 0, OS_OPT_PEND_BLOCKING...void Task_DataHandler(void *p_arg) { while(1) { OSSemPend(&RxSem, 0, OS_OPT_PEND_BLOCKING
OS_OPT opt, OS_ERR *p_err) 获取信号量 OS_SEM_CTR OSSemPend
1、创建信号量 OS_EVENT *OSSemCreate (INT16U cnt); cnt:信号量计数器的初始值 return:返回值为已经创建的信号量的指针 2、请求信号量函数 void OSSemPend
recv_data_for_fpga; u8 err; u8 i; u8 t,len; u16 b[16]={0}; frame_typedef rec_data; while(1) { OSSemPend
&bsd_mutex, (OS_OPT )OS_OPT_POST_1, (OS_ERR *)&err); OSSemPend...) format, v_args); va_end(v_args); /* 互斥操作 */ OSSemPend...&bsd_mutex, (OS_OPT )OS_OPT_POST_1, (OS_ERR *)&err); OSSemPend...) format, v_args); va_end(v_args); /* 互斥操作 */ OSSemPend
OS_ERR *)&err); } void GUI_X_Lock (void) //--------------(5) { OS_ERR err; OSSemPend...*********** */ void GUI_X_WaitEvent (void) //--------------(8) { OS_ERR err; OSSemPend...------(13) { int r; OS_ERR err; CheckInit(); if (KeyPressed == 0) { OSSemPend
while(1) { /* 等待获取信号量同步消息,接收到后实现截图功能,将图片以BMP格式保存到SD卡中 */ OSSemPend