/* * 模块名称:主机侧单测桩 - cmsis_os.h(sys_log_mcu 套件专用) * 模块功能:给 App/log/sys_log_mcu.c(与 soe_store.c)一个/g主机可编译的 CMSIS-RTOS V2 **消息队列 + * 内核状态**最小子集。 * * ⚠ 仅供 test/host/sys_log_mcu/ 使用,不参与 MCU 构建。 * 真实 Middlewares/.../CMSIS_RTOS_V2/cmsis_os.h 第 126/127/155 行会拉 * FreeRTOS.h + task.h + cmsis_os2.h(整棵内核 + portmacro),PC 上编不动。 * * 保真点(逐条对照真实头,签名一字不改;改动真实头即编译期报错): * - osMessageQueueId_t = void * (cmsis_os2.h:207) * - osMessageQueueAttr_t 六字段同序同型 (cmsis_os2.h:272~279) * ——sys_log_mcu.c 用 .name 指定成员初始化,字段名也必须一致 * - osStatus_t osMessageQueuePut(id, const void *, uint8_t, uint32_t) (:689) * - osStatus_t osMessageQueueGet (id, void *, uint8_t *, uint32_t) (:697) * - osMessageQueueId_t osMessageQueueNew(uint32_t, uint32_t, const attr *)(:676) * - osKernelState_t osKernelGetState(void) (cmsis_os2.h:298) * - osOK = 0 / osErrorResource = -3 (cmsis_os2.h:177/180) * - osKernelRunning = 2 (cmsis_os2.h:63) * 本模块只用到内核状态的两个值,其余按真实枚举原样列出(少列会让"顺手改了 * 状态判定"这类漂移编不出来)。 * * 队列行为由测试单元给**真 FIFO + 满/空语义**的强符号实现(不是恒返 osOK 的空壳): * soe_store_post 的"队列满就丢弃并计数"、drain 的"取空即停"全靠这两条才测得出。 * * 创建日期:2026-10-24 */ #ifndef CMSIS_OS_H #define CMSIS_OS_H #include #ifdef __cplusplus extern "C" { #endif /* 不透明句柄(真实 cmsis_os2.h:195~207 全是 void *) */ typedef void *osMessageQueueId_t; typedef void *osThreadId_t; typedef void *osTimerId_t; typedef void *osEventFlagsId_t; typedef void *osMutexId_t; typedef void *osSemaphoreId_t; /* 状态码(cmsis_os2.h:176~186) */ typedef enum { osOK = 0, osError = -1, osErrorTimeout = -2, osErrorResource = -3, osErrorParameter = -4, osErrorNoMemory = -5, osErrorISR = -6 } osStatus_t; /* 内核状态(cmsis_os2.h:60~68) */ typedef enum { osKernelInactive = 0, osKernelReady = 1, osKernelRunning = 2, osKernelLocked = 3, osKernelSuspended = 4, osKernelError = -1 } osKernelState_t; /* 消息队列属性(cmsis_os2.h:272~279,字段名与顺序原样) */ typedef struct { const char *name; uint32_t attr_bits; void *cb_mem; uint32_t cb_size; void *mq_mem; uint32_t mq_size; } osMessageQueueAttr_t; osMessageQueueId_t osMessageQueueNew(uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr); osStatus_t osMessageQueuePut(osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout); osStatus_t osMessageQueueGet(osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t timeout); uint32_t osMessageQueueGetCount(osMessageQueueId_t mq_id); osStatus_t osMessageQueueReset(osMessageQueueId_t mq_id); osKernelState_t osKernelGetState(void); #ifdef __cplusplus } #endif #endif /* CMSIS_OS_H */