完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
我用ucos创建了两个任务,创建了一个信号量协调他们之间的关系,我的想法是任务can_send_thread()一直阻塞等待信号量,申请到信号量是在执行下面的程序,当调用函数canSend()时释放信号量。我现的问题是调用了canSend释放信号量,但是任务can_send_thread还是无法获得信号量,我已经把 can_send_thread的优先级调到最高。那位高手帮我分析一下
void start_task(void *pdata) { OS_CPU_SR cpu_sr=0; pdata = pdata; tran_sem = OSSemCreate(0); OSStatinit(); OS_ENTER_CRITICAL(); OSTaskCreate(can_send_thread,(void *)0,(OS_STK*)&SEND_TASK_STK[SEND_STK_SIZE-1],SEND_TASK_PRIO); OSTaskCreate(can_send,(void *)0,(OS_STK*)&CAN_SEND_TASK_STK[CAN_SEND_STK_SIZE-1],CAN_SEND_TASK_PRIO); OSTaskSuspend(START_TASK_PRIO); OS_EXIT_CRITICAL(); } void can_send(void) { while(1) { canSend(CAN1,M); delay_ms(100); } } void can_recv_thread(void* parameter) { while(1) { OSSemPend(recv_sem,0,&err); 。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。。。。。 。。。。。。。。。。。。。 } } unsigned char canSend(CAN_PORT notused, Message *m) { 。。。。。。。。。 。。。。。。。。。 。。。。。。。。。 。。。。。。。。。 OSSemPost(tran_sem); } |
|
相关推荐
3个回答
|
|
|
自己顶
|
|
|
|
|
|
你调用函数 OSSemPend()请求的是信号量recv_sem,调用函数 OSSemPost()发送的是信号量tran_sem!的两个函数操作的都不是一个信号量,而且你的start_task()里面只创建了信号量tran_sem,能正常才怪了!
|
|
|
|
|
|
这个贴错了,那个请求的信号量也是tran_sem
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 05:50 , Processed in 0.449641 second(s), Total 50, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1605