int32_t osSignalSet (osThreadId thread_id, int32_t signal) { #if( configUSE_TASK_NOTIFICATIONS == 1 ) BaseType_t xHigherPriorityTaskWoken = pdFALSE; uint32_t ulPreviousNotificationValue = 0; if (inHandlerMode()) { if(xTaskGenericNotifyFromISR( thread_id , (uint32_t)signal, eSetBits, &ulPreviousNotificationValue, &xHigherPriorityTaskWoken ) != pdPASS ) return 0x80000000; portYIELD_FROM_ISR( xHigherPriorityTaskWoken ); } else if(xTaskGenericNotify( thread_id , (uint32_t)signal, eSetBits, &ulPreviousNotificationValue) != pdPASS ) return 0x80000000; return ulPreviousNotificationValue; #else (void) thread_id; (void) signal; return 0x80000000; /* Task Notification not supported */ #endif }
时间: 2024-04-16 12:29:37 浏览: 152
RESTful-with-notifications---Sales-Catalog.zip_The Project_restf
这段代码是一个可能的osSignalSet函数的实现示例。它根据配置文件中的宏定义configUSE_TASK_NOTIFICATIONS的值来确定使用任务通知功能还是返回错误代码。如果启用了任务通知功能,函数会根据当前的运行环境(是否在中断模式下)调用不同的函数来设置信号。在中断模式下,函数会调用xTaskGenericNotifyFromISR函数来从中断服务程序中设置信号,并使用xHigherPriorityTaskWoken参数来指示是否有更高优先级的任务需要唤醒。最后,函数会返回先前的信号状态值。如果未启用任务通知功能,函数将返回一个特定的错误代码0x80000000。
阅读全文