
OSSemPost(EventSem_SendOK);OSQPost(UARTRcvQueue, RcvBuf);那么問題來了,很多小伙伴學了基礎的原理之后,就存在這樣的疑惑:RTOS任務間通信能用全局變量嗎?
答案是:能用,但強烈不建議用。
全局變量有什么問題?

信號量、隊列通信原理
INT8U OSSemPost (OS_EVENT *pevent){OS_CPU_SR cpu_sr = 0u;if (pevent == (OS_EVENT *)0) { /* Validate 'pevent' */return (OS_ERR_PEVENT_NULL);}if (pevent->OSEventType != OS_EVENT_TYPE_SEM) { /* Validate event block type */return (OS_ERR_EVENT_TYPE);}OS_ENTER_CRITICAL();if (pevent->OSEventGrp != 0u) { /* See if any task waiting for semaphore *//* Ready HPT waiting on event */(void)OS_EventTaskRdy(pevent, (void *)0, OS_STAT_SEM, OS_STAT_PEND_OK);OS_EXIT_CRITICAL();OS_Sched(); /* Find HPT ready to run */return (OS_ERR_NONE);}if (pevent->OSEventCnt < 65535u) { /* Make sure semaphore will not overflow */pevent->OSEventCnt++; /* Increment semaphore count to register event */OS_EXIT_CRITICAL();return (OS_ERR_NONE);}OS_EXIT_CRITICAL(); /* Semaphore value has reached its maximum */return (OS_ERR_SEM_OVF);}

