OS_EVENT *OSSemCreate (INT16U cnt)
省略
if (OSIntNesting > 0u) { /* See if called from ISR ... */
return ((OS_EVENT *)0); /* ... can't CREATE from an ISR */
}
省略
UCOS II 为什么不能在中断的时候创建信号量?ISR: 中断服务程序的缩写
UCOS II 是一个实时操作系统(RTOS),在中断处理期间创建信号量可能会导致竞争条件和死锁等问题,因此 UCOS II 不支持在中断处理期间创建信号量。在中断处理期间,操作系统通常会禁止任务切换和使用一些操作系统服务,以确保中断响应的及时和可靠性。因此,在中断处理期间,应该仅执行必要的操作(例如,读取硬件状态、清除中断标志等),避免使用复杂的系统调用和数据结构操作。如果需要在中断处理期间使用信号量,可以考虑使用中断服务例程向任务发送信号量,或者使用其他类型的同步原语,例如互斥锁或事件标志。
linux系统也不能创建,不只是UCOSII,你可以在中断下半部创建的