加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

关于freertos接收邮箱的问题

(2017-03-20 12:23:50)
分类: OS
void StartLED3Task(void const * argument)
{

 
osStatus my_err = osErrorOS;
static uint16_t send_message[2] = {0x1234,0x5678};
 
  for(;;)
  {
    my_err = osMailPut(myMail01Handle,send_message);
if(my_err == osOK){
HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);
osDelay(100);
}
  }
   
}

void StartLED4Task(void const * argument)
{
 
osEvent my_event;
uint16_t rcv_message[2];
 
  for(;;)
  {
    my_event = osMailGet(myMail01Handle,portMAX_DELAY);
if(my_event.status == osEventMail){
memcpy(rcv_message,my_event.value.p,2*sizeof(uint16_t));
HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
}
    osDelay(100);
  }
 
}
这种方式(uint16_t rcv_message[2];memcpy(rcv_message,my_event.value.p,2*sizeof(uint16_t));)是可以完整将接收的数据赋值给rcv_message;
如果用另一种方式(uint16_t *rcv_message;rcv_message=my_event.value.p),此时发现my_event.value.p地址是接收到的数据的地址,但是rcv_message依然是0x00000000,就是说此处指针不能相互赋值,好奇怪!后来发现,是编译器的原因性大,因为我下面再加一句就好了,rcv_message[0]=rcv_message[0];意思是只要后期有引用就行了。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有