2536|5

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

uc/os的信号量问题,懂UC的请指教 [复制链接]

首先是信号量的申明:

char *UARTRxBuf = "1234567890123456";
OS_EVENT *UARTRX;

OS_EVENT *UARTSend;
char *UARTBuf = "1234567890123456";

信号量的初始化:
static void taskUART(void *parg)
{
  (void)parg;
  static INT32U cut;
  INT8U err;
  
  char string[5];
  
  uartInit();
  UARTSend = OSSemCreate(0);  //产生发送信号量
  UARTRX = OSSemCreate(0);    //产生接收信号量
  for(;;)
  {
    OSSemPend(UARTSend,0,&err);  //等待其它任务给信号,然后发送  ,这个发送信号量是正常的
    uartPuts(UARTBuf);
  }
}


这里是接收信号量的发送
在中断里void  UART1_ISR(void)
{
  
  char  c;
  static INT16U rx_cut;
  static INT8U test_eof[4];
    c  =  UARTCharGet(UART1_BASE);
    if(c == 'h')
    {
      *UARTRxBuf = 'h';  //这是帧头
      rx_cut = 1;
    }
    else if(rx_cut  < 17)  //最大帧长。
    {
      UARTRxBuf[rx_cut++] = c;
      test_eof[3] = test_eof[2];
      test_eof[2] = test_eof[1];
      test_eof[1] = test_eof[0];
      test_eof[0] = c;
      if((test_eof[3] == 0x3c)&&(test_eof[2] == 0xc3)&&(test_eof[1] == 0x33)&&(test_eof[0] == 0xcc))
      {
        OSSemPost(UARTRX);    //接收正常就发送信号量。
      }
    }
    UARTIntClear(UART1_BASE , UART_INT_RX | UART_INT_RT);
}

在其它任务中无限等待信号量
static void taskLED2(void  *parg)
{
  (void)parg;
  INT8U err;
  for(;;)
  {
   
    LED_Toggle( LED2);              //led闪烁
    OSTimeDlyHMSM(0,0,1,0);        // 延时1s
    OSSemPend(UARTRX,0,&err);                    //OS_NO_ERR 等待接收信号量?£
                                 
  }
}
但这里为什么这个信号量一直没有被挂起到等待状态,这个灯一直在闪烁。。。

最新回复

谢谢4楼,本人才疏学浅,谢谢指教。。。  详情 回复 发表于 2009-11-30 15:13
点赞 关注

回复
举报

74

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
OSSemPend(UARTRX,0,&err);                    //OS_NO_ERR 等待接收信号量?£
放到LED_Toggle( LED2);              //led闪烁
前面
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
lz结果怎么样
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
关注结果!!!
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
是不是OS_CFG文件里的OS_MAX_EVENTS定义的太小了,导致信号量没有创建成功?

OSSemCreate()执行完成之后,检查一下返回值是否是NULL,如果是,则信号量创建失败
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢4楼,本人才疏学浅,谢谢指教。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表