信号量
SemaphoreHandle_t xBleUpdateNetSemaphore;
extern SemaphoreHandle_t xBleUpdateNetSemaphore;
configASSERT((xBleUpdateNetSemaphore = xSemaphoreCreateBinary()));
发送
xSemaphoreGive( xBleUpdateNetSemaphore );
或者
static portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR( xBleUpdateNetSemaphore, &xHigherPriorityTaskWoken );
portEND_SWITCHING_ISR(xHigherPriorityTaskWoken );
接受
if( xSemaphoreTake( xBleUpdateNetSemaphore, 3000 ) == pdTRUE )
{
printf("\n\n\n\n\nxSemaphoreTake( xBleUpdateNetSemaphore, 3000 ) == pdTRUE--MQTT_OK?\n\n\\n\n");
}
消息队列
QueueHandle_t xQueue;
#define QUEUE_X_LENGTH (5)
typedef struct
{
uint8_t id;
uint8_t msg[20];
}xMsgType;
xQueue = xQueueCreate( QUEUE_X_LENGTH, sizeof( xMsgType ) );
发送
void mqtt_send_publish_form_isr(void)
{
xMsgType p;
for(int i=0;i<20;i++)
p.msg[i]=i;
p.id = 12;
xQueueSendFromISR( xQueue, ( void* )&p, NULL );
}
或者
int mqtt_send_publish(void)
{
xMsgType p;
for(int i=0;i<20;i++)
p.msg[i]=i+1;
p.id = 12;
xQueueSend( xQueue, ( void* )&p, NULL );
}
接受
static void mqtt_send_task( void const *pvParameters)
{
xMsgType temmsg={0};
configASSERT(pvParameters);
while(1)
{
if(xQueueReceive( xQueue, &temmsg, 1000 ) == pdTRUE)
{
memset(&temmsg , 0x00 , sizeof(xMsgType));
}
}
}