关于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};
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];
if(my_event.status == osEventMail){
memcpy(rcv_message,my_event.value.p,2*sizeof(uint16_t));
HAL_GPIO_TogglePin(LD4_GPIO_Port,LD4_Pin);
}
}
这种方式(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];意思是只要后期有引用就行了。