256 Commits
Author SHA1 Message Date
零中断延迟的RTOS 4de3c801c1 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 13:32:26 +00:00
零中断延迟的RTOS be3eab8b72 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 09:14:14 +00:00
零中断延迟的RTOS 10609a6b87 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 09:10:58 +00:00
零中断延迟的RTOS 4d0d476d1f update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 09:03:14 +00:00
零中断延迟的RTOS 5ecf3ad785 update Port/port_x32/RISC-V32/mcucfg_rv32.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 09:01:08 +00:00
零中断延迟的RTOS 102a2e281c update Port/port_x32/Cortex-M/mcucfg_cm0.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 08:58:28 +00:00
零中断延迟的RTOS 94a8a46b8a update Port/port_x32/Cortex-M/mcucfg_cm3.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 08:55:51 +00:00
零中断延迟的RTOS 3ea4acae49 update Port/port_x32/Cortex-M/mcucfg_cm3.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 08:55:20 +00:00
零中断延迟的RTOS 673089cab3 update Port/port_x32/RISC-V32/port_rv32.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-15 08:13:12 +00:00
零中断延迟的RTOS 76ee4725b8 update Port/port_x32/RISC-V32/port_rv32i_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 14:06:43 +00:00
零中断延迟的RTOS 9715ece53d update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 12:28:08 +00:00
零中断延迟的RTOS f975de7bef update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 12:26:28 +00:00
零中断延迟的RTOS 9e94f863ce update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 12:25:00 +00:00
零中断延迟的RTOS 62156e014a 删除文件 Port/port_x32/RISC-V32/port_rv32_HWS.S 2026-08-14 12:05:18 +00:00
零中断延迟的RTOS f2292046a4 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 12:04:58 +00:00
零中断延迟的RTOS 4fb7f49772 删除文件 Port/port_x32/RISC-V32/port_rv32_SWS.S 2026-08-14 12:04:02 +00:00
零中断延迟的RTOS 4e9c468ff5 删除文件 Port/port_x32/RISC-V32/port_rv32_FSL.S 2026-08-14 12:03:53 +00:00
零中断延迟的RTOS 7ee44c7713 删除文件 Port/port_x32/RISC-V32/port_rv32.h 2026-08-14 12:03:47 +00:00
零中断延迟的RTOS e2201f75ea 删除文件 Port/port_x32/RISC-V32/mcucfg_rv32.h 2026-08-14 12:03:38 +00:00
零中断延迟的RTOS 1fbf7d2602 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 12:01:48 +00:00
零中断延迟的RTOS 740012fa5d 删除文件 Port/port_x32/Cortex-M/port_cmx_s.c 2026-08-14 12:00:53 +00:00
零中断延迟的RTOS 7a9257ae15 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 11:03:42 +00:00
零中断延迟的RTOS 0a277dbc12 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 11:01:09 +00:00
零中断延迟的RTOS 34ec9abe6b update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-14 10:44:08 +00:00
零中断延迟的RTOS 97b507d50e update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 15:46:39 +00:00
零中断延迟的RTOS bcbb48f906 删除文件 Port/port_x32/RISC-V32/port_rv32_HWS.S 2026-08-09 15:45:47 +00:00
零中断延迟的RTOS 8bee36aa35 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 10:17:31 +00:00
零中断延迟的RTOS e6f8bb4627 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 10:14:37 +00:00
零中断延迟的RTOS d751406129 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 10:06:43 +00:00
零中断延迟的RTOS a2a3b5fb16 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 10:00:33 +00:00
零中断延迟的RTOS 99d71a97c6 删除文件 Port/port_x32/RISC-V32/port_rv32_HWS.S 2026-08-09 09:59:23 +00:00
零中断延迟的RTOS ad6086de2e update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 09:25:52 +00:00
零中断延迟的RTOS 98f38fc1b3 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-09 09:15:39 +00:00
零中断延迟的RTOS d8b0374dfe update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 23:59:39 +00:00
零中断延迟的RTOS bf98e1f2f8 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 23:58:20 +00:00
零中断延迟的RTOS bb18d6a6b0 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 23:49:36 +00:00
零中断延迟的RTOS 135984c962 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 23:44:47 +00:00
零中断延迟的RTOS 9662824b4b 删除文件 Port/port_x32/RISC-V32/port_rv32_HWS.S 2026-08-06 23:43:24 +00:00
零中断延迟的RTOS f7bb67dd47 删除文件 Port/port_x32/RISC-V32/port_rv32_SWS.S 2026-08-06 23:43:14 +00:00
零中断延迟的RTOS e2d661aeeb update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 18:00:45 +00:00
零中断延迟的RTOS 2d9a3dcd27 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 17:59:19 +00:00
零中断延迟的RTOS ee552807da update System/os_handler.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 17:52:59 +00:00
零中断延迟的RTOS e61648ab08 update CosyOS-内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 17:43:43 +00:00
零中断延迟的RTOS 788a361ceb 删除文件 System/os_main.c 2026-08-06 17:42:19 +00:00
零中断延迟的RTOS 9e14cf0d29 update System/os_handler.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 16:26:09 +00:00
零中断延迟的RTOS 0e290803e4 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 15:10:21 +00:00
零中断延迟的RTOS c97f37ba2e update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 15:08:15 +00:00
零中断延迟的RTOS f76ce9288a update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 15:02:31 +00:00
零中断延迟的RTOS a772e49b9c update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 15:00:19 +00:00
零中断延迟的RTOS 003a65358d update System/os_handler.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 14:56:17 +00:00
零中断延迟的RTOS f2e6cd0d84 update System/os_main.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-06 14:50:06 +00:00
零中断延迟的RTOS 8ce43f660f update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 20:22:37 +00:00
零中断延迟的RTOS 8b26e9a3b6 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 20:18:57 +00:00
零中断延迟的RTOS 7f17a82d6b update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 20:10:47 +00:00
零中断延迟的RTOS c359724bc0 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 20:03:11 +00:00
零中断延迟的RTOS bb194d1c1a update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 19:56:54 +00:00
零中断延迟的RTOS f7d923e30c update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 19:53:35 +00:00
零中断延迟的RTOS d04ef559b4 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 19:48:35 +00:00
零中断延迟的RTOS 435cee98fe update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 19:42:53 +00:00
零中断延迟的RTOS 568c7f99a5 update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 17:52:48 +00:00
零中断延迟的RTOS 2b0063f207 update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 16:54:14 +00:00
零中断延迟的RTOS fd3e2460f8 update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 16:39:01 +00:00
零中断延迟的RTOS 0a0eaf4cd0 update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 16:27:05 +00:00
零中断延迟的RTOS 618b3e9c5a update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 15:34:48 +00:00
零中断延迟的RTOS f62b89ce16 update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:39:13 +00:00
零中断延迟的RTOS 0e8c5e3121 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:28:45 +00:00
零中断延迟的RTOS 4d0f6298b2 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:27:47 +00:00
零中断延迟的RTOS 2e2800119b update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:26:52 +00:00
零中断延迟的RTOS 378d882bb5 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:21:34 +00:00
零中断延迟的RTOS 865bcf203f update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 14:12:10 +00:00
零中断延迟的RTOS 264692dafb update Port/port_x32/RISC-V32/port_rv32_HWS.S.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-04 13:56:01 +00:00
零中断延迟的RTOS 4cd506c243 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 09:57:58 +00:00
零中断延迟的RTOS 2e47d970e7 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 08:31:58 +00:00
零中断延迟的RTOS cdc2f2691b update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 08:27:58 +00:00
零中断延迟的RTOS b0a946708a update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 04:28:10 +00:00
零中断延迟的RTOS 73322f5281 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 04:27:22 +00:00
零中断延迟的RTOS 7f86763d0b update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 04:20:02 +00:00
零中断延迟的RTOS 8ea1b48bae update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 04:16:54 +00:00
零中断延迟的RTOS e9fefdbdf0 删除文件 Port/port_x32/RISC-V32/port_rv32_HWS.S 2026-08-03 04:14:44 +00:00
零中断延迟的RTOS a6bd76641f update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 04:13:26 +00:00
零中断延迟的RTOS 6b394e0fc8 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 03:57:11 +00:00
零中断延迟的RTOS 12b9814f78 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 03:55:12 +00:00
零中断延迟的RTOS 115c6ae309 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 03:43:46 +00:00
零中断延迟的RTOS 3c5921822b update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-08-03 03:39:25 +00:00
零中断延迟的RTOS b97cb04ac6 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 15:50:32 +00:00
零中断延迟的RTOS ddd2ee3a4e update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 15:48:51 +00:00
零中断延迟的RTOS ca30605162 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 15:44:36 +00:00
零中断延迟的RTOS 9e0f8bb081 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 15:16:04 +00:00
零中断延迟的RTOS 1aec3b5bdc update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 15:00:05 +00:00
零中断延迟的RTOS 04ec41fd17 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:37:56 +00:00
零中断延迟的RTOS 1dbf7dd8be update Demo-Service/6、综合应用/comp_usart.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:06:19 +00:00
零中断延迟的RTOS 5ea3c51598 update Demo-Service/5、协作式任务/coop_yield.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:05:24 +00:00
零中断延迟的RTOS 91f6f907a4 update Demo-Service/5、协作式任务/coop_ressus_3.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:04:23 +00:00
零中断延迟的RTOS 4a29ad7ca5 update Demo-Service/5、协作式任务/coop_ressus_2.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:03:51 +00:00
零中断延迟的RTOS 1a9eae729e update Demo-Service/5、协作式任务/coop_ressus_1.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:03:22 +00:00
零中断延迟的RTOS 1bd366647d update Demo-Service/5、协作式任务/coop_binary.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:02:53 +00:00
零中断延迟的RTOS fd34bb79da update Demo-Service/4、重入访问/reent_semaph.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:02:19 +00:00
零中断延迟的RTOS a53fa58e70 update Demo-Service/2、消息同步/msg_taskmsg.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:01:20 +00:00
零中断延迟的RTOS d320bb5991 update Demo-Service/1、事件同步/event_semaph.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:00:33 +00:00
零中断延迟的RTOS 91159f0404 update Demo-Service/1、事件同步/event_ressus.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 14:00:17 +00:00
零中断延迟的RTOS 6f3523739f update Demo-Service/1、事件同步/event_group.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:59:56 +00:00
零中断延迟的RTOS a48ed16b78 update Demo-Service/1、事件同步/event_clrblk.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:59:35 +00:00
零中断延迟的RTOS e8a1d00689 update Demo-Service/1、事件同步/event_binary.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:59:13 +00:00
零中断延迟的RTOS 38296014bc update Demo-Service/3、互斥访问/mutexc_mutex.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:58:52 +00:00
零中断延迟的RTOS da601e3cc5 update Demo-Service/2、消息同步/msg_taskmsg.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:57:33 +00:00
零中断延迟的RTOS 8fc00a4a44 update Demo-Service/1、事件同步/event_semaph.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:57:07 +00:00
零中断延迟的RTOS ac7a7d8c06 update Demo-Service/1、事件同步/event_ressus.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:56:37 +00:00
零中断延迟的RTOS 58f3cc85d4 update Demo-Service/1、事件同步/event_group.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:55:53 +00:00
零中断延迟的RTOS c7b9902abe update Demo-Service/1、事件同步/event_clrblk.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:55:34 +00:00
零中断延迟的RTOS a85384709b update Demo-Service/1、事件同步/event_binary.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:54:02 +00:00
零中断延迟的RTOS facfef0317 update Demo-Build/80251/demo_debug.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:46:16 +00:00
零中断延迟的RTOS 8b568aeec7 update Demo-Build/8051/demo_debug.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:44:53 +00:00
零中断延迟的RTOS 47bdd060c7 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 13:40:20 +00:00
零中断延迟的RTOS 121a0eb633 update Demo-Build/RISC-V32/demo_debug.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-31 12:36:33 +00:00
零中断延迟的RTOS 0ff1a11af6 update Demo-Build/Cortex-M/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 17:14:21 +00:00
零中断延迟的RTOS 7488d6517f update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 17:06:01 +00:00
零中断延迟的RTOS 4100045848 update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 17:04:14 +00:00
零中断延迟的RTOS 30a237e4aa update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 17:02:04 +00:00
零中断延迟的RTOS c8c509ca10 update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:57:09 +00:00
零中断延迟的RTOS bd8200f8e9 update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:55:41 +00:00
零中断延迟的RTOS 4bf045bc01 update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:54:55 +00:00
零中断延迟的RTOS 90e3cc513d update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:49:11 +00:00
零中断延迟的RTOS 7dfa63d0ea update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:44:42 +00:00
零中断延迟的RTOS 0cc8a19fc7 update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:36:07 +00:00
零中断延迟的RTOS 01a2860547 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:05:10 +00:00
零中断延迟的RTOS 06b15e8488 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 16:01:05 +00:00
零中断延迟的RTOS 6e7c456d57 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 15:55:08 +00:00
零中断延迟的RTOS 1f181d8023 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 15:49:42 +00:00
零中断延迟的RTOS 709d3a18a8 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 15:47:46 +00:00
零中断延迟的RTOS efaf286203 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 15:11:10 +00:00
零中断延迟的RTOS c2d642525a update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:50:56 +00:00
零中断延迟的RTOS 5295187019 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:43:11 +00:00
零中断延迟的RTOS 95c7dbf4eb update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:42:30 +00:00
零中断延迟的RTOS affac1faa6 update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:28:16 +00:00
零中断延迟的RTOS 21f82e3019 update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:24:45 +00:00
零中断延迟的RTOS 022a1c5991 update Demo-Build/Cortex-M/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:22:54 +00:00
零中断延迟的RTOS 09ec59bfb5 update Demo-Build/Cortex-M/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:21:44 +00:00
零中断延迟的RTOS e2045f95c1 update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:06:35 +00:00
零中断延迟的RTOS cbc51acb97 update Demo-Build/80251/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 14:04:56 +00:00
零中断延迟的RTOS ae8a6e567c update Demo-Build/8051/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 13:56:19 +00:00
零中断延迟的RTOS 12876fac06 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 13:01:22 +00:00
零中断延迟的RTOS f4a05aef91 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-30 12:56:33 +00:00
零中断延迟的RTOS 1fb6170f55 删除文件 Port/port_x32/RISC-V32/mcucfg_rv32.h 2026-07-30 12:54:02 +00:00
零中断延迟的RTOS 4b181c7d21 删除文件 Port/port_x32/RISC-V32/port_rv32_FSL.S 2026-07-30 12:53:38 +00:00
零中断延迟的RTOS 72f24513e4 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 18:25:06 +00:00
零中断延迟的RTOS 3d5696c87b update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 16:25:22 +00:00
零中断延迟的RTOS 65aafb7b20 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 16:12:31 +00:00
零中断延迟的RTOS 0034c5bdf9 update System/CosyOS.H.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 14:19:37 +00:00
零中断延迟的RTOS 7d67c6fe8e update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 13:49:10 +00:00
零中断延迟的RTOS 61754d794b update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 13:48:21 +00:00
零中断延迟的RTOS 86b8af336f update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 13:46:23 +00:00
零中断延迟的RTOS b5ed7ac6da 删除文件 Port/port_x32/RISC-V32/port_rv32_yyy.h 2026-07-29 13:33:08 +00:00
零中断延迟的RTOS 6e5a101e31 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-29 13:32:54 +00:00
零中断延迟的RTOS df38e5b51f 删除文件 Port/port_x32/RISC-V32/mcucfg_rv32.h 2026-07-29 13:28:58 +00:00
零中断延迟的RTOS d4e5887e3d 重命名 Port/port_x32/RISC-V32/port_rv32.h 为 Port/port_x32/RISC-V32/port_rv32_yyy.h 2026-07-29 13:28:51 +00:00
零中断延迟的RTOS 951bb09350 删除文件 Port/port_x32/RISC-V32/port_rv32_s.s 2026-07-29 13:28:31 +00:00
零中断延迟的RTOS a8411e1166 update CosyOS-安装程序.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-23 13:34:38 +00:00
零中断延迟的RTOS a35346cb5b 删除文件 Setup/CosyOS-III Cube.exe 2026-07-23 13:33:21 +00:00
零中断延迟的RTOS 99f5f49cd0 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 22:35:21 +00:00
零中断延迟的RTOS 15fead1050 update Port/syscfg.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 21:57:20 +00:00
零中断延迟的RTOS 6464c6b4be update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 21:32:36 +00:00
零中断延迟的RTOS 380d66f935 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 21:03:16 +00:00
零中断延迟的RTOS f5cea63fd1 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 20:45:31 +00:00
零中断延迟的RTOS a83b5716c2 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 20:34:23 +00:00
零中断延迟的RTOS 6be9f04e2c update Demo-Build/RISC-V32/demo_debug.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 20:24:36 +00:00
零中断延迟的RTOS 860fb30446 update Demo-Build/RISC-V32/demo_debug.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 20:23:20 +00:00
零中断延迟的RTOS 97aa794318 update Demo-Build/demo_task.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 20:11:06 +00:00
零中断延迟的RTOS d3b009650c update Port/port_x32/Cortex-M/EWARM/port_cmx_iar.s.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 17:28:10 +00:00
零中断延迟的RTOS 8b8115cbdb update Port/port_x32/Cortex-M/port_cmx_s.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 17:24:51 +00:00
零中断延迟的RTOS 5e61714b09 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:53:12 +00:00
零中断延迟的RTOS 89bd25c8f4 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:45:00 +00:00
零中断延迟的RTOS b00c0bf0b0 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:43:51 +00:00
零中断延迟的RTOS 4fad1cf7c6 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:41:17 +00:00
零中断延迟的RTOS abdd6fb5a2 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:40:09 +00:00
零中断延迟的RTOS 03674f2a67 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:38:48 +00:00
零中断延迟的RTOS a5d5f67d67 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:36:30 +00:00
零中断延迟的RTOS a4c820eae7 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:34:56 +00:00
零中断延迟的RTOS 1ef5db08b3 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:33:24 +00:00
零中断延迟的RTOS 375db84214 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:21:12 +00:00
零中断延迟的RTOS f127be8889 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:19:42 +00:00
零中断延迟的RTOS f510a84c5c update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 16:16:59 +00:00
零中断延迟的RTOS e6d3e2d637 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 14:59:24 +00:00
零中断延迟的RTOS 86c5e65387 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 14:57:14 +00:00
零中断延迟的RTOS f8a028544e update CosyOS-例程文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 14:34:41 +00:00
零中断延迟的RTOS 8c7b7555e7 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 14:01:11 +00:00
零中断延迟的RTOS 844be48fe7 update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 13:56:32 +00:00
零中断延迟的RTOS 96645fb0bd update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 13:51:41 +00:00
零中断延迟的RTOS 5e10a47a7e update Demo-Build/RISC-V32/readme.txt.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 13:33:32 +00:00
零中断延迟的RTOS 391a446f78 重命名 Demo-Build/RISC-V32/.keep 为 Demo-Build/RISC-V32/readme.txt 2026-07-21 12:57:55 +00:00
零中断延迟的RTOS 09318a5468 新建 RISC-V32 2026-07-21 12:57:25 +00:00
零中断延迟的RTOS ecbcd1eab2 update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:36:11 +00:00
零中断延迟的RTOS 68bfb689b5 update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:17:04 +00:00
零中断延迟的RTOS b6b7450fd2 update CosyOS-III Cube.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:15:45 +00:00
零中断延迟的RTOS af7c2d1f8f update CosyOS-说明文档.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:14:10 +00:00
零中断延迟的RTOS 7d7a5dba85 删除文件 CosyOS-III API用户参考手册 V2.4.1.chm 2026-07-21 12:13:22 +00:00
零中断延迟的RTOS 38fdd5fc9f 删除文件 System/.keep 2026-07-21 12:09:04 +00:00
零中断延迟的RTOS 56f17ae01a update CosyOS-内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:08:36 +00:00
零中断延迟的RTOS 9dde142350 update CosyOS-内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:07:30 +00:00
零中断延迟的RTOS 76aa3329a6 新建 System 2026-07-21 12:06:14 +00:00
零中断延迟的RTOS 9b63e26af4 删除文件 Port/port_x32/RISC-V32/.keep 2026-07-21 12:00:43 +00:00
零中断延迟的RTOS 83836e889e update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 12:00:17 +00:00
零中断延迟的RTOS ebb9ab73c3 新建 RISC-V32 2026-07-21 11:59:27 +00:00
零中断延迟的RTOS 13509382f6 删除文件 Port/port_x32/.keep 2026-07-21 11:59:10 +00:00
零中断延迟的RTOS fb83a40582 删除文件 Port/port_x32/Cortex-M/EWARM/.keep 2026-07-21 11:58:17 +00:00
零中断延迟的RTOS 1a621091c7 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:58:04 +00:00
零中断延迟的RTOS 7a796a79fa 新建 EWARM 2026-07-21 11:57:26 +00:00
零中断延迟的RTOS 9b047e3f6d 删除文件 Port/port_x32/Cortex-M/.keep 2026-07-21 11:57:13 +00:00
零中断延迟的RTOS ce9ab16608 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:56:58 +00:00
零中断延迟的RTOS 2c84c16542 新建 Cortex-M 2026-07-21 11:55:51 +00:00
零中断延迟的RTOS 2a4e1ae79d update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:55:23 +00:00
零中断延迟的RTOS cd39472d0b 删除文件 Port/port_x51/80251/.keep 2026-07-21 11:53:58 +00:00
零中断延迟的RTOS f3d8c7f75c update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:53:46 +00:00
零中断延迟的RTOS 99a862c24c 删除文件 Port/port_x51/8051/.keep 2026-07-21 11:52:25 +00:00
零中断延迟的RTOS fe7f533e23 update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:52:05 +00:00
零中断延迟的RTOS 242c792348 删除文件 Port/port_x51/.keep 2026-07-21 11:51:20 +00:00
零中断延迟的RTOS b44aa679ec update CosyOS-移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:51:06 +00:00
零中断延迟的RTOS 62ca66b452 新建 80251 2026-07-21 11:50:01 +00:00
零中断延迟的RTOS b9fc783e0e 新建 8051 2026-07-21 11:49:44 +00:00
零中断延迟的RTOS d7701ab34f 删除文件 Port/syscfgYYY.h 2026-07-21 11:46:37 +00:00
零中断延迟的RTOS 78aab300cc update 移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-21 11:46:29 +00:00
零中断延迟的RTOS 2461bdc795 新建 port_x32 2026-07-21 11:45:12 +00:00
零中断延迟的RTOS 18a2964a28 新建 port_x51 2026-07-21 11:44:50 +00:00
零中断延迟的RTOS 539f8bb7fe 重命名 Port/syscfg.h 为 Port/syscfgYYY.h 2026-07-21 11:44:12 +00:00
零中断延迟的RTOS fec76f6517 删除文件 Port/80251 2026-07-21 11:44:00 +00:00
零中断延迟的RTOS a68c4cb1a2 删除文件 Port/8051 2026-07-21 11:43:54 +00:00
零中断延迟的RTOS c9e827ecae 删除文件 Port/Cortex-M 2026-07-21 11:43:48 +00:00
零中断延迟的RTOS 85ba43f42f 删除文件 System 2026-07-21 11:43:30 +00:00
零中断延迟的RTOS f6b7ea3f4b 删除文件 Setup/CosyOS-III Cube.exe 2026-07-21 11:41:30 +00:00
零中断延迟的RTOS e8a581f374 update Port/Cortex-M/port_cmx_s.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 13:24:38 +00:00
零中断延迟的RTOS a036aabfc5 update Port/Cortex-M/port_cmx_s.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 13:13:08 +00:00
零中断延迟的RTOS 62a113cdb7 update Port/Cortex-M/port_cmx_s.c.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:46:23 +00:00
零中断延迟的RTOS 29136200fc update README.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:14:00 +00:00
零中断延迟的RTOS f2703de52f update CosyOS-III 版本更新记录.md.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:12:44 +00:00
零中断延迟的RTOS ff04e13fb8 update Port/8051/port_8051.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:04:59 +00:00
零中断延迟的RTOS 28bcd2a977 update Port/80251/port_80251.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:03:49 +00:00
零中断延迟的RTOS 7c94ffaf2c update Port/80251/port_80251.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:03:04 +00:00
零中断延迟的RTOS d0c785c728 update Port/8051/port_8051.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 12:02:22 +00:00
零中断延迟的RTOS ab4baf9483 删除文件 Port/Cortex-M/EWARM/port_cmx_iarrr.sss 2026-07-04 11:58:40 +00:00
零中断延迟的RTOS b974048809 update 移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 11:58:28 +00:00
零中断延迟的RTOS bd93389800 重命名 Port/Cortex-M/EWARM/port_cmx_iar.s 为 Port/Cortex-M/EWARM/port_cmx_iarrr.sss 2026-07-04 11:58:04 +00:00
零中断延迟的RTOS f794555424 update 移植文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 11:56:44 +00:00
零中断延迟的RTOS 95f4284e3e 删除文件 Port/Cortex-M/port_cmx_s.c 2026-07-04 11:56:13 +00:00
零中断延迟的RTOS 53d4992392 删除文件 Port/Cortex-M/port_cmx.h 2026-07-04 11:56:04 +00:00
零中断延迟的RTOS d9f0e754d1 删除文件 Port/Cortex-M/port_cmx.c 2026-07-04 11:55:54 +00:00
零中断延迟的RTOS 7a8e921aed update 内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 11:54:33 +00:00
零中断延迟的RTOS a59987cacb 删除文件 System/ur_eapi.h 2026-07-04 11:53:39 +00:00
零中断延迟的RTOS c5245def5f 删除文件 System/sv_tick.h 2026-07-04 11:53:24 +00:00
零中断延迟的RTOS dee1c31f6c 删除文件 System/sv_tick.c 2026-07-04 11:53:12 +00:00
零中断延迟的RTOS 616237e46b 删除文件 System/sv_task.h 2026-07-04 11:52:52 +00:00
零中断延迟的RTOS 085a3a0970 删除文件 System/sv_task.c 2026-07-04 11:52:40 +00:00
零中断延迟的RTOS c9c1c9f334 删除文件 System/sv_int_loc.h 2026-07-04 11:52:23 +00:00
零中断延迟的RTOS 8a3ee7ae2b 删除文件 System/sv_int_loc.c 2026-07-04 11:52:06 +00:00
零中断延迟的RTOS b2fc49612f 删除文件 System/sv_com.c 2026-07-04 11:51:47 +00:00
零中断延迟的RTOS 3ad4ca7d3e 删除文件 System/os_redef.h 2026-07-04 11:51:28 +00:00
零中断延迟的RTOS 2da00995e2 删除文件 System/CosyOS.H 2026-07-04 11:51:11 +00:00
零中断延迟的RTOS 64c9b1bf95 update Port/Cortex-M/mcucfg_cmx.h.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2026-07-04 11:50:26 +00:00
90 changed files with 2779 additions and 1568 deletions
Binary file not shown.
Binary file not shown.
+51
View File
@@ -273,3 +273,54 @@
该功能可用来创建相应的数组,或把它们封装在结构体中。
* 更新日期:2026.06.28
### V2.4.2
* 内核代码和移植文件中,部分关键路径添加屏障指令,以保安全。
* 裁剪掉了 for Cortex-M0 的 互斥访问机制二。
* 更新日期:2026.07.04
### V3.0.0
* 重构了移植架构,为使未来的移植工作可以更顺利的进行。
* 新增了对 RISC-V32 指令集架构的支持,并针对 青稞V4系列微处理器 进行测试和调优。
* 中断FIFO服务技术进一步升级,优化了包括 中断FIFO服务装载器、中断FIFO服务处理器。<br>
针对 80251 推出了新的 中断FIFO服务互斥访问方案,新增方案包括 [INC]指令、关闭总中断。
* 其它调整及优化。
* 更新日期:2026.07.21
### V3.0.1
* 针对 RISC-V32,推出了自研先进技术,可实现 CH32V 全程开启硬件压栈。<br>
该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等皆可完美支持。
* 优化了中断FIFO服务装载器,性能进一步提升。同时增加了新的互斥访问方案:关闭总中断(嵌套方式)。
* 更新日期:2026.07.30
### V3.0.2
* 解决了 V3.0.1 版本中,硬件压栈相关技术的不可靠因素,确保系统稳定可靠运行。
* 更新日期:2026.08.03
### V3.0.3
* V3.0.2 版本的硬件压栈技术仍存在不可靠因素,现已彻底解决。
* 同时推出了 硬件压栈技术可靠性验证方法,以方便测试和验证。
* 更新日期:2026.08.05
### V3.0.4
* 解决了 Cortex-M33 任务不能正常启动并运行的问题,可靠性进一步提升。
* 更新日期:2026.08.07
### V3.0.5
* Cortex-M33 任务不能正常启动的问题解决后,导致 RISC-V 任务不能正常启动。<br>
紧急推出新版本解决上述问题,并使 RISC-V 的任务切换更加可靠。
* 更新日期:2026.08.07
### V3.0.6
* for RISC-V32,推出了终极先进技术,可实现硬件压栈无需可靠性验证,即可确保任务切换的安全、可靠。
* 更新日期:2026.08.09
### V3.0.7
* 针对 RV32 硬件压栈,分为两个文件,port_rv32e_HWS.S、port_rv32i_HWS.S,分别针对 RV32E 和 RV32I。
* 针对 RV32E,中断FIFO服务的装载,新增了互斥访问机制。
* 优化了 arm 互斥访问机制,当中断FIFO服务并发装载时,效率会有显著提升。
* 更新日期:2026.08.14
### V3.0.8
* RISC-V32,系统滴答自动配置做出调整,计数模式调整为向上计数,以尽可能兼容青稞系列更多的型号。
* 更新日期:2026.08.15
+4 -3
View File
@@ -3,11 +3,12 @@
* @file demo_debug.c
* @brief 例程-DEBUG for STC32G
* @author 迟凯峰
* @version V1.0.2
* @date 2026.06.28
* @version V1.0.3
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 1 /* 编译开关 */ \
&& defined ( __C251__ )
#include "CosyOS.H"
#if (SYSCFG_DEBUGGING == __ENABLED__)
+22 -3
View File
@@ -4,16 +4,24 @@
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
而后,在 C251、A251 标签页中,可能需要添加标准头文件的包含路径。
2、main函数(参照例程 demo_main.c)
2、MCU配置
CosyOS-配置 / mcucfg_80251.h -> 系统时钟频率,需要正确定义。
内存方案配置,需根据edata内存的大小选择合适的方案。
基本的原则是:
(1)如果edata内存很大,优先考虑方案一。
(2)如果ddata内存适中,考虑方案二三四。
(3)如果edata内存很小,优先考虑方案五。
3、main函数(参照例程 demo_main.c)
初始化 PendSV中断(必须)
配置 DEBUG(可选)
启动 CosyOS(必须)
3、系统中断(参照例程 demo_int.c)
4、系统中断(参照例程 demo_int.c)
屏蔽 定时器0中断原函数(必须)
屏蔽 PendSV中断原函数(必须)
4、DEBUG(可选,参照例程 demo_debug.c)
5、DEBUG(可选,参照例程 demo_debug.c)
不出意外的话,您的项目现在已经可以正常编译了。
@@ -34,4 +42,15 @@
其中的用户定义部分,与PendSV中断配置、用户自定义任务切换现场保护
等功能息息相关,在未来可能需要适当调整。
--------------------------------------------------------------------
其它注意事项
1、任务栈SIZE不允许大于65535。
2、CosyOS for 80251,原生仅适配 Keil C251 编译器,如果您使用其它编译器,
应注意以下事项:
(1)CosyOS 内核中需要 __C251__ 关键字做条件编译,移植汇编文件中需要
__A251__ 关键字做条件编译,如果编译器不支持该关键字可自行添加。
(2)其它可能的、未知的兼容性问题。
+4 -3
View File
@@ -3,11 +3,12 @@
* @file demo_debug.c
* @brief 例程-DEBUG for STC8H
* @author 迟凯峰
* @version V1.0.2
* @date 2026.06.28
* @version V1.0.3
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 1 /* 编译开关 */ \
&& defined ( __C51__ )
#include "CosyOS.H"
#if (SYSCFG_DEBUGGING == __ENABLED__)
+22 -3
View File
@@ -4,16 +4,19 @@
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
而后,在 C51、A51 标签页中,可能需要添加标准头文件的包含路径。
2、main函数(参照例程 demo_main.c)
2、MCU配置
CosyOS-配置 / mcucfg_8051.h -> 系统时钟频率,需要正确定义。
3、main函数(参照例程 demo_main.c)
初始化 PendSV中断(必须)
配置 DEBUG(可选)
启动 CosyOS(必须)
3、系统中断(参照例程 demo_int.c)
4、系统中断(参照例程 demo_int.c)
屏蔽 定时器0中断原函数(必须)
屏蔽 PendSV中断原函数(必须)
4、DEBUG(可选,参照例程 demo_debug.c)
5、DEBUG(可选,参照例程 demo_debug.c)
不出意外的话,您的项目现在已经可以正常编译了。
@@ -64,4 +67,20 @@
覆盖地图中应逐一查看这些函数,对于使用了内存的应手动修正调用树或
移除覆盖分析。
-------------------------------------------------------------------
其它注意事项
1、默认情况下,任务栈SIZE不允许大于255。只有在启用了XBPSTACK的任务切换
现场保护时,任务栈SIZE才允许大于255,最大可为65535。
2、CosyOS for 8051,原生仅适配 Keil C51 编译器,如果您使用其它编译器,
应注意以下事项:
(1)CosyOS 内核中需要 __C51__ 关键字做条件编译,移植汇编文件中需要
__A51__ 关键字做条件编译,如果编译器不支持该关键字可自行添加。
(2)CosyOS 内核中会用到 #pragma NOAREGS 来实现相对寄存器访问,如果
编译器不支持应设法等效替换。
(3)已知某些编译器不支持 .s 汇编文件,可将移植文件中的 .s 文件更名为
.A51,如 port_8051s.s 更名为 port_8051s.A51。
(4)其它可能的、未知的兼容性问题。
+12 -12
View File
@@ -6,24 +6,24 @@
1、系统配置
CosyOS-配置 / syscfg.h -> 系统配置>>标准头文件,应首先被正确定义。
2、main函数(参照例程 demo_main.c)
2、MCU配置
CosyOS-配置 / mcucfg_cmx.h,配置 系统中断 和 互斥访问方案。
Cortex-M3/M4/M7等内核:根据系统中断配置,选择 mcucfg_cm0.h
或 mcucfg_cm3.h 进行再配置。
Cortex-M0/M0+等内核:在 mcucfg_cm0.h 中,继续配置 系统中断。
3、main函数(参照例程 demo_main.c)
初始化 SysTick替代定时器(可选)
配置 DEBUG(可选)
启动 CosyOS(必须)
3、系统中断(参照例程 demo_int.c)
4、系统中断(参照例程 demo_int.c)
屏蔽 PendSV中断原函数(必须)
调用 tCosyTick_Handler(必须)
4、DEBUG(可选,参照例程 demo_debug_fwl.c 或 demo_debug_hal.c)
5、DEBUG(可选,参照例程 demo_debug_fwl.c 或 demo_debug_hal.c)
Cortex-M3/M4/M7等内核:
不出意外的话,您的项目现在已经可以正常编译了。
Cortex-M0/M0+等内核:
CosyOS-配置 / mcucfg_cmx.h,配置 系统中断 和 互斥访问方案;
CosyOS-配置 / mcucfg_cm0.h,配置 系统中断;
至此,您的项目才能正常编译。
不出意外的话,您的项目现在已经可以正常编译了。
但在未来,仍需重点关注如下内容:
@@ -35,8 +35,8 @@ Cortex-M0/M0+等内核:
CosyOS-配置 / mcucfg_cm0.h
CosyOS-配置 / mcucfg_cm3.h
3、启动文件配置
在启动文件中需要合理的配置堆栈,STACK固定给中断使用;
3、堆栈配置
需要合理的配置堆栈,STACK固定给中断使用;
动态分配的内存和动态创建的对象,都需要用到HEAP。
+106
View File
@@ -0,0 +1,106 @@
/**************************************************************************//**
* @item CosyOS-III 例程(系统构建)
* @file demo_debug.c
* @brief 例程-DEBUG for CH32V30x use firmware library
* @author 迟凯峰
* @version v1.0.1
* @date 2026.07.31
******************************************************************************/
#if 0 /* 编译开关 */
#include "CosyOS.H"
#if (SYSCFG_DEBUGGING == __ENABLED__)
/*
* 用户定义
*/
/*-------------------------------------------------------------*
| DEBUG_MODE | 输出(UART SEND)| 输入(UART RECV)| 推荐等级 |
|------------+------------------+------------------+----------|
| 0 | printf(查询) | 串口接收中断 | * |
|------------+------------------+------------------+----------|
| 1 | 串口发送中断 | 串口接收中断 | *** |
*-------------------------------------------------------------*/
#define DEBUG_MODE 1 // 建议不要配置为0,否则极易导致 系统调试器(Debugger)的任务栈需求激增!
/* DEBUG RECV 缓存SIZE */
#define DEBUG_RECV_BUFF 32
////////////////////////////////////////////////////////////////////////////////
// 1、例程中使用了UART1做为DEBUG专用串口,用户如需更换其它串口请自行调整。
// 2、下方的DEBUG配置函数 Debug_Config(),不能够取代基本的串口初始化工作,
// 用户在main函数中,在调用该函数之前,需先行初始化串口。
////////////////////////////////////////////////////////////////////////////////
#include "ch32v30x_usart.h"
static char u_debug_recv_buff[DEBUG_RECV_BUFF];
static char *u_debug_recv_p = u_debug_recv_buff;
#if (DEBUG_MODE == 0)
#include <stdio.h>
#elif (DEBUG_MODE == 1)
static char *u_debug_send_p;
#endif
void Debug_Config(void)
{
#if (DEBUG_MODE == 0)
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
#elif (DEBUG_MODE == 1)
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
#endif
}
#if (SYSCFG_DEBUG_SENDLEN == __DISABLED__)
void debug_hook(char _XDATA_MEM_ *p)
#else
void debug_hook(char _XDATA_MEM_ *p, s_u16_t len)
#endif
{
#if (DEBUG_MODE == 0)
printf("%s", p);
xDebugSend_Complete();
#elif (DEBUG_MODE == 1)
u_debug_send_p = p;
USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
#endif
}
// 根据是否启用硬件压栈及串口中断优先级,选择相匹配的声明方式:
void USART1_IRQHandler(void) __attribute__((interrupt)); // 声明为软件压栈
//void USART1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); // 声明为硬件压栈
void USART1_IRQHandler(void)
{
#if (DEBUG_MODE == 1)
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){
if(*u_debug_send_p){
USART_SendData(USART1, *u_debug_send_p++);
}
else{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
xDebugSend_Complete();
}
}
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
if(u_debug_recv_p - u_debug_recv_buff < DEBUG_RECV_BUFF - 1){
*u_debug_recv_p = USART_ReceiveData(USART1);
if(*u_debug_recv_p++ == '\n'){
xDebugRecv_Handler(u_debug_recv_buff, u_debug_recv_p - u_debug_recv_buff);
u_debug_recv_p = u_debug_recv_buff;
}
}
else{
u_debug_recv_p = u_debug_recv_buff;
}
}
}
#endif
#endif
+184
View File
@@ -0,0 +1,184 @@
RISC-V32 之系统构建
概述
1、rv32 目前暂不支持 cube 安装,用户需手动移植。移植过程中遇到问题
可加入社区获取技术支持。
2、目前仅支持 PSP栈模式,即不存在全局唯一主栈或中断专用栈,而是当前
任务栈即为当前主栈。这导致所有中断都是入任务栈,所以中断嵌套深度
应尽量配置少一些,同时任务栈SIZE应尽量大一些,以防溢出。
3、CosyOS 采用了自研先进技术,可实现 CH32V 全程开启硬件压栈。
该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等
皆可完美支持。所以,如果您的处理器支持硬件压栈,建议开启。
如果开启硬件压栈,中断函数的声明原则等同裸机。
即如果最大硬件压栈深度为3级,需要将低优先级的三级中断声明为硬件压栈,
高优先级的中断声明为软件压栈。
RV32I 开启硬件压栈,注意事项:
(1)处理器需要仅工作在机器模式
可在启动文件中,通过配置 mstatus 的 MPP 为 3 来实现。
(2)x4(tp)、mscratch、0xE000E040(中断优先级阈值)等寄存器,专用
于任务切换,不允许用户使用。
移植流程(以 MRS2 为例)
1、裸机工程
准备项目的裸机工程,一个最基础的工程即可。
2、删除文件
删除 CosyOS-源代码 中无关的文件,使其不被编译。
建议必须删除的文件:
(1)Port 中,仅保留 port_x32、syscfg.h
(2)Port / port_x32 中,仅保留 RISC-V32、port_x32.c、port_x32.h
建议可选删除的文件:
(1)Demo-Service
(2)Demo-Build 中,仅保留 RISC-V32、demo_task.c
注:如果不删除不会影响正常编译
3、拷贝文件
拷贝 CosyOS-源代码 至工程中。
4、包含路径
打开工程,添加下方的包含路径。
C包含路径:
cosyos-v3.0.1/System
cosyos-v3.0.1/Port
cosyos-v3.0.1/Port/port_x32
cosyos-v3.0.1/Port/port_x32/RISC-V32
汇编包含路径:
cosyos-v3.0.1/Port
cosyos-v3.0.1/Port/port_x32/RISC-V32
构建流程
0、Include/Exclude
Port / port_x32 / RISC-V32 / port_rv32_SWS.S, 为软件压栈专用,兼容 RV32E、RV32I 指令集;
Port / port_x32 / RISC-V32 / port_rv32e_HWS.S,为硬件压栈专用,针对 RV32E 指令集(青稞 V2 系列);
Port / port_x32 / RISC-V32 / port_rv32i_HWS.S,为硬件压栈专用,针对 RV32I 指令集(青稞 V3/V4 系列);
根据是否启用硬件压栈,Include 相匹配的文件,Exclude 不匹配的文件。
如果启用硬件压栈,port_rv32e_HWS.S、port_rv32i_HWS.S 可同时包含。
1、系统配置
Port / syscfg.h -> 系统配置>>处理器架构,应定义为 4。
Port / syscfg.h -> 系统配置>>标准头文件,需要正确定义,如定义为
"ch32v30x.h"。
2、MCU配置
Port / port_x32 / RISC-V32 / mcucfg_rv32.h 中,配置系统滴答和
系统时钟。
3、main函数
在main函数的末尾处,先配置 DEBUG(如果使用 CosyOS-任务管理器),
最后再启动 CosyOS(必须)。
4、系统中断
CosyOS 固定采用 SysTick_Handler 和 SW_Handler 做为系统中断。
用户需要自行在 SysTick_Handler 中调用 tCosyTick_Handler。
用户不要自行创建 SW_Handler。
5、DEBUG(可选,参照例程 demo_debug.c)
在未来,用户仍需重点关注如下内容:
1、系统配置
Port / syscfg.h
2、MCU配置
Port / port_x32 / RISC-V32 / mcucfg_rv32.h
3、启动文件配置
在 handle_reset 中,配置特权级(mstatus);
配置硬件压栈使能、中断嵌套使能、中断嵌套深度、硬件压栈溢出后中断使能(0x804)。
4、ld文件配置
配置硬件栈size。
通常配置一个极小的数值即可,据不完全测试,该值配置为0即可正常运行:
__stack_size = 0;
例程
/* 例程-main */
int main(void)
{
/* USER INIT CODE BEGIN */
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
SystemCoreClockUpdate();
Delay_Init();
////USART_Printf_Init(115200);
USART1_UART_Init (115200);
printf("SystemClk:%d\r\n",SystemCoreClock);
printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );
printf("This is printf example\r\n");
/* USER INIT CODE END */
/* USER DEBUG CONFIG */// for CosyOS-Taskmgr
#if (SYSCFG_DEBUGGING == 1)
if(1){
void Debug_Config(void);
Debug_Config();
}// defined in demo_debug.c
#endif
/* USER 启动 CosyOS */// 在main函数的末尾处
if(1){
#if 1 // 建议前期调试时开启,如果CosyOS启动失败会返回错误码提示用户!
unsigned char _ecode = uStartCosyOS();
printf("CosyOS startup failed, error code: %d.\r\n", (int)_ecode);
#else
uStartCosyOS();
#endif
}
while(1);
}
/* 例程-SysTick_Handler */// 根据是否启用硬件压栈,选择相匹配的声明方式:
//void SysTick_Handler(void) __attribute__((interrupt)); // 声明为软件压栈
void SysTick_Handler(void) __attribute__((interrupt("WCH-Interrupt-fast"))); // 声明为硬件压栈
void SysTick_Handler(void)
{
SysTick->SR = 0;
tCosyTick_Handler();
}
/* 例程-启动文件 */// 使能硬件压栈并仅为机器模式
handle_reset:
/* Enable interrupt nesting and hardware stack */
// HWSTKOVEN, PMTCFG, INESTEN, HWSTKEN
li t0, (1 << 4) | (3 << 2) | (1 << 1) | 1
csrw 0x804, t0
/* Enable floating point and global interrupt, configure privileged mode */
// FS, MPP, MPIE, MIE
li t0, (3 << 13) | (3 << 11) | (1 << 7) | (1 << 3)
csrw mstatus, t0
/*
0x804
HWSTKOVEN:硬件压栈溢出后中断使能
PMTCFG: 中断嵌套深度
INESTEN: 中断嵌套使能
HWSTKEN: 硬件压栈使能
mstatus
FS: 浮点单元状态
MPP: 进中断前特权模式
MPIE:进中断前中断使能状态
MIE: 机器模式中断使能
*/
/* 例程-断点测试钩子 */// for RV32I 硬件压栈
void test_breakpoint_hook(void)
{
printf("break point test failed\r\n");
while(1);
}
+6 -12
View File
@@ -3,8 +3,8 @@
* @file demo_task.c
* @brief 例程-任务
* @author 迟凯峰
* @version V1.0.4
* @date 2025.12.24
* @version V1.1.0
* @date 2026.07.22
******************************************************************************/
#if 0 /* 编译开关 */
@@ -17,19 +17,13 @@
|-----------------------+-----------------------------------------------------------*
| 任务名称 | 任务优先级 | 任务栈大小 | 安全运行时 | 任务名称文本(兼容模式) |
|----------+------------+------------+------------+---------------------------------|
| task_1 | 1级 | 384字节 | 0为无限长 | 0为自动引用任务名称,即"task_1" |
| task_1 | 1级 | 512字节 | 0为无限长 | 0为自动引用任务名称,即"task_1" |
|----------+------------+------------+------------+---------------------------------|
| task_2 | 2级 | 384字节 | 9滴答周期 | "task_led"为任务名称文本 |
| task_2 | 2级 | 512字节 | 9滴答周期 | "task_led"为任务名称文本 |
*-----------------------------------------------------------------------------------*/
/*
注意事项 for 8051:
1、在默认情况下,任务栈SIZE不允许大于255。
2、只有在启用了XBPSTACK的任务切换现场保护时,任务栈SIZE才允许大于255,最大可为65535。
*/
/* 静态创建 task_1 */
uCreateTask(task_1, 1, 384, 0, 0)
uCreateTask(task_1, 1, 512, 0, 0)
{
while(1){
printf("task_1\r\n");
@@ -38,7 +32,7 @@ uCreateTask(task_1, 1, 384, 0, 0)
}
/* 动态创建 task_2 */
dCreateTask(task_2, 2, 384, 9, "task_led")
dCreateTask(task_2, 2, 512, 9, "task_led")
{
while(1){
printf("task_2\r\n");
+2 -2
View File
@@ -6,7 +6,7 @@
* @note 事件处理线程(task_1)中,可以实现超时处理机制。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-------------------------------------------------------*
@@ -19,7 +19,7 @@
| pGiveBin(bin) | 中断中给予二值信号量 - FLAG服务 |
*-------------------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -6,7 +6,7 @@
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-------------------------------------------------*
@@ -19,7 +19,7 @@
| pClearBlock(task) | 中断中清除阻塞 - FLAG服务 |
*-------------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -7,10 +7,10 @@
统一处理该类事件。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.22
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -6,7 +6,7 @@
* @note 事件处理线程(task_1)中,无法实现超时处理机制。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-----------------------------------------------*
@@ -19,7 +19,7 @@
| pResumeTask(task) | 中断中恢复任务 - FLAG服务 |
*-----------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -7,7 +7,7 @@
* @note 计数信号量,是唯一能够实现并发事件同步的手段。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-------------------------------------------------------*
@@ -18,7 +18,7 @@
| iGiveSem(sem) | 中断中给予计数信号量 - FIFO服务 |
*-------------------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -5,10 +5,10 @@
* @details 通过私信的应用实现任务间通信。
* @author 迟凯峰
* @version V1.0.1
* @date 2026.04.16
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H" // 用户的各个c文件中应包含此文件
#include <stdio.h> // for printf
+2 -2
View File
@@ -6,10 +6,10 @@
* @note 可实现超时处理机制。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.25
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -6,10 +6,10 @@
* @note 可实现超时处理机制。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.25
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
@@ -6,7 +6,7 @@
* @note 适用于多个任意优先级任务的循环协作。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-------------------------------------------*
@@ -17,7 +17,7 @@
| uGiveBin(bin) | 任务中 给予二值信号量 |
*-------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
@@ -6,7 +6,7 @@
* @note 适用于两个不同优先级任务的循环协作。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*-------------------------------------*
@@ -17,7 +17,7 @@
| uResumeTask(task) | 任务中 恢复任务 |
*-------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
@@ -6,7 +6,7 @@
* @note 适用于多个不同优先级任务的循环协作。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*----------------------------------------------------------*
@@ -15,7 +15,7 @@
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
*----------------------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
@@ -6,7 +6,7 @@
* @note 适用于多个相同优先级任务的循环协作。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.10.21
* @date 2026.07.31
******************************************************************************/
/*----------------------------------------------------------*
@@ -15,7 +15,7 @@
| uResumeSuspend(task) | 任务中 恢复指定任务并挂起自身任务 |
*----------------------------------------------------------*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
@@ -6,7 +6,7 @@
* @note 适用于多个相同优先级任务的循环协作。
* @author 迟凯峰
* @version V1.0.1
* @date 2026.04.16
* @date 2026.07.31
******************************************************************************/
/*--------------------------------*
@@ -22,7 +22,7 @@
3、任务的启动顺序,决定了任务的协作运行顺序。
*/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#include "CosyOS.H"
+2 -2
View File
@@ -12,10 +12,10 @@
* @note 本例程仅以 STM32-HAL库 的应用为例,其它情形请用户自行做出调整。
* @author 迟凯峰
* @version V1.0.1
* @date 2026.02.19
* @date 2026.07.31
******************************************************************************/
#if 1 /* 编译开关 */
#if 0 /* 编译开关 */
#define PENDSV_FIFO_FLAG 2 // 定时服务为中断挂起服务,选择 FIFO服务 或 FLAG服务(1:FIFO服务,2:FLAG服务)
File diff suppressed because it is too large Load Diff
-166
View File
@@ -1,166 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_cmx.c
* @brief CMSIS Cortex-M Core Port File
* @author 迟凯峰
* @version V2.3.9
* @date 2026.06.20
******************************************************************************/
#include "os_var.h"
#ifdef __PORT_CMX_H
/*
* 栈监控(涵盖主栈和任务栈)
*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
#include <string.h>
s_u32_t m_msp; // main stack initial pointer
s_u32_t m_stacksize; // main stack size
s_u32_t m_stacklen_max = 0; // main stack used length of maximum
static s_u8_t const stack_data[32] = {"CosyOS is an RTOS come on China."};
void m_stack_check_init(s_u8_t *addr, s_u32_t size)
{
s_u32_t i;
s_u32_t c = size / sizeof(stack_data);
s_u8_t *p = addr - size;
for(i = 0; i < c; i++){
memcpy(p, stack_data, sizeof(stack_data));
p += sizeof(stack_data);
}
}
s_u32_t m_stack_check(s_u8_t *addr, s_u32_t size)
{
s_u32_t i;
s_u32_t c = size / sizeof(stack_data);
s_u8_t *p = addr - size;
for(i = 0; i < c; i++){
if(!memcmp(p, stack_data, sizeof(stack_data))){
p += sizeof(stack_data);
}
else{
break;
}
}
return (s_u32_t)(addr - p);
}
#endif
/*
* 中断FIFO服务
*/
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_u32_t mPendSV_FIFO_DepthMAX = 0;
s_u16_t mPendSV_FIFO_CountMAX = 0;
#endif
void *mPendSV_FIFO_0[MCUCFG_PENDSVFIFO_DEPTH + 1]; /*!< FIFO0 */
void *mPendSV_FIFO_1[MCUCFG_PENDSVFIFO_DEPTH + 1]; /*!< FIFO1 */
bool volatile m_sign_fifo = true; /*!< FIFO互斥访问锁:入FIFO与出FIFO的互斥
if(m_sign_fifo == true) {中断FIFO服务装载器入FIFO0,中断FIFO服务处理器出FIFO1}
if(m_sign_fifo == false){中断FIFO服务装载器入FIFO1,中断FIFO服务处理器出FIFO0} */
#if (MCUCFG_PENDSVFIFO_MUTEX == 2) /*!< 互斥访问机制一 */
void *mPendSV_FIFO_X; /*!< FIFO替身计数器 */
#elif (MCUCFG_PENDSVFIFO_MUTEX == 3) /*!< 互斥访问机制二 */
bool volatile m0_sign_mutex = false; /*!< FIFO计数器访问 */
s_u8_t M0_IRQn_Pri[48]; /*!< 中断优先级表 */
#endif
/* 中断FIFO服务处理器 */
void mPendSV_FIFOHandler(void)
{
register void **p;
register void *sv;
register s_u32_t i;
register s_u16_t j = 0;
__FIFO_0:
p = mPendSV_FIFO_0;
/* 独占访问FIFO0 */
m_sign_fifo = false;
if(true){
i = (s_u32_t)mPendSV_FIFO_0[0];
#if (MCUCFG_PENDSVFIFO_MUTEX == 3)
i >>= 24;
#endif
mPendSV_FIFO_0[0] = OS_NULL;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(i > mPendSV_FIFO_DepthMAX){
mPendSV_FIFO_DepthMAX = i;
}
#endif
if(i > MCUCFG_PENDSVFIFO_DEPTH){
i = MCUCFG_PENDSVFIFO_DEPTH;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_fault.overflow_pendsvfifo = true;
#endif
}
j += i;
do{
sv = *++p;
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
#else
if(sv != OS_NULL){
*p = OS_NULL;
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
}
#endif
}while(--i);
}
OS_NOP(1);
p = mPendSV_FIFO_1;
/* 独占访问FIFO1 */
m_sign_fifo = true;
if(mPendSV_FIFO_1[0]){
i = (s_u32_t)mPendSV_FIFO_1[0];
#if (MCUCFG_PENDSVFIFO_MUTEX == 3)
i >>= 24;
#endif
mPendSV_FIFO_1[0] = OS_NULL;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(i > mPendSV_FIFO_DepthMAX){
mPendSV_FIFO_DepthMAX = i;
}
#endif
if(i > MCUCFG_PENDSVFIFO_DEPTH){
i = MCUCFG_PENDSVFIFO_DEPTH;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_fault.overflow_pendsvfifo = true;
#endif
}
j += i;
do{
sv = *++p;
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
#else
if(sv != OS_NULL){
*p = OS_NULL;
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
}
#endif
}while(--i);
}
if(mPendSV_FIFO_0[0] && j < MCUCFG_PENDSVFIFO_COUNT) goto __FIFO_0;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
#endif
}
#endif
#endif
@@ -3,8 +3,8 @@
* @file port_cmx_iar.s
* @brief CMSIS Cortex-M Core Port File for IAR Compiler
* @author 迟凯峰
* @version V2.3.1
* @date 2026.03.01
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
用户须知
@@ -41,7 +41,6 @@ OS_PendSV_Handler:
bl sPendSV_Handler
; 直接返回吗?
cbz r0, __RETURN
isb
; 保护现场吗?
ldr r1, =s_task_current
IF (SYSCFG_DEBUGGING == 1)
@@ -49,24 +48,22 @@ OS_PendSV_Handler:
cbz r0, __RESTORE
ENDIF
mrs r0, psp
isb
; 任务PC监控
IF (SYSCFG_TASKPC_MONITOR == 1)
EXTERN s_taskmgr_sign
EXTERN s_pc
ldr r2, =s_taskmgr_sign
ldrb r2, [r2]
cbz r2, __PROTECTING
ldr r2, [r0,#24]
ldr r3, =s_pc
str r2, [r3]
ENDIF
; 保护现场
__PROTECTING IF (MCUCFG_ASPEN_LSPEN == 1)
IF (MCUCFG_ASPEN_LSPEN == 1)
vstmdb r0!, {s16-s31}
ENDIF
stmdb r0!, {r4-r11}
ldr r2, [r1]
str r0, [r2]
dsb
; 恢复现场
__RESTORE ldr r3, =s_task_news
ldr r3, [r3]
@@ -84,22 +81,29 @@ __RETURN pop {pc}
; 中断FIFO服务装载器
IF (MCUCFG_PENDSVFIFO_DEPTH > 0)
IF (SYSCFG_PENDSVFIFO_DEPTH > 0)
PUBLIC mPendSV_FIFOLoader
mPendSV_FIFOLoader:
EXTERN mPendSV_FIFO_0
EXTERN mPendSV_FIFO_1
EXTERN m_sign_fifo
EXTERN m_fifo_lock
; FIFO选择
ldr r2, =m_sign_fifo
ldr r2, =m_fifo_lock
ldrb r3, [r2]
cbz r3, __FIFO1
__FIFO0 ldr r1, =mPendSV_FIFO_0
b __COUNT
b __OVERFLOW1
__FIFO1 ldr r1, =mPendSV_FIFO_1
; 计数溢出
__OVERFLOW1 IF (0) ; 正常情况下计数器难以溢出,默认关闭防护以提高装载效率。
ldr r2, [r1]
ldr r3, =0x80000000
cmp r2, r3
bhi __OVER
ENDIF
; FIFO计数
__COUNT /* 1、互斥访问指令 */
/* 互斥访问指令 */
#if (MCUCFG_PENDSVFIFO_MUTEX == 1)
__LOOP ldrex r2, [r1]
adds r2, #1
@@ -110,7 +114,7 @@ __LOOP ldrex r2, [r1]
#error 互斥访问方案 未选择 互斥访问指令!
#endif
; FIFO溢出
cmp r2, #MCUCFG_PENDSVFIFO_DEPTH
cmp r2, #SYSCFG_PENDSVFIFO_DEPTH
bhi __OVER
; FIFO装载
lsls r2, r2, #2
@@ -3,8 +3,8 @@
* @file mcucfg_cm0.h
* @brief CMSIS Cortex-M Core Config File
* @author 迟凯峰
* @version V2.0.0
* @date 2025.08.04
* @version v3.0.0
* @date 2026.08.15
******************************************************************************/
#ifndef __MCUCFG_CM0_H
@@ -62,11 +62,11 @@
// 替代定时器-重装载值
// 如果该值为常量可配置为常量,否则应配置为可读的重装载值寄存器。
#define MCUCFG_SYSTICK_LOADVALUE (SYSCFG_SYSTICK_CYCLE - 1) //=(TIM14->ARR)
#define MCUCFG_SYSTICK_LOADVALUE (SYSCFG_SYSTICK_CYCLE - 1) // = (TIM14->ARR)
// 替代定时器-时钟
// 告知CosyOS您所配置的定时器时钟,单位为兆赫(MHZ)。
#define MCUCFG_SYSTICK_CLK 1 //=(系统时钟 / (TIM14->PSC + 1))
#define MCUCFG_SYSTICK_CLK 1 // = (系统时钟 / (TIM14->PSC + 1))
//////////////////////////////////* 系统定义 *//////////////////////////////////
@@ -3,8 +3,8 @@
* @file mcucfg_cm3.h
* @brief CMSIS Cortex-M Core Config File
* @author 迟凯峰
* @version V2.0.0
* @date 2025.08.04
* @version v3.0.0
* @date 2026.08.15
******************************************************************************/
#ifndef __MCUCFG_CM3_H
@@ -69,7 +69,7 @@
// 系统滴答-时钟
// 告知CosyOS您所配置的系统滴答时钟,单位为兆赫(MHZ)。
#define MCUCFG_SYSTICK_CLK (系统时钟 / ((SysTick->CTRL & 4) ? 1 : 8))
#define MCUCFG_SYSTICK_CLK 168 // = (系统时钟 / ((SysTick->CTRL & 4) ? 1 : 8))
#endif
@@ -3,8 +3,8 @@
* @file mcucfg_cmx.h
* @brief CMSIS Cortex-M Core Config File
* @author 迟凯峰
* @version V2.3.1
* @date 2026.03.01
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __MCUCFG_CMX_H
@@ -33,12 +33,12 @@
///////////////////////////////////////////////////////////////////////////////
// <o> 中断FIFO服务装载器-互斥访问方案
// <1=> 互斥访问指令 <2=> 互斥访问机制一 <3=> 互斥访问机制二 <0=> 关闭总中断
// <1=> 互斥访问指令 <255=> 互斥访问机制 <0=> 关闭总中断
// <i> ------------------------------------------------------------------------
// <i> 一、互斥访问指令
// <i> 互斥访问指令
// <i> 仅适用于Cortex-M3/M4/M7等支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
// <i> ------------------------------------------------------------------------
// <i> 二、互斥访问机制一
// <i> 互斥访问机制
// <i> 仅推荐于Cortex-M0/M0+等不支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
// <i> 全局寄存器变量
// <i> 首先需要定义一个全局寄存器变量(系统默认定义为r6),专用于互斥访问:
@@ -55,46 +55,20 @@
// <i> 注:中断优先级号为负值的中断通常仅包括 Reset_Handler、NMI_Handler、HardFault_Handler。
// <i> 用户需严格遵守上述的服务调用规约,否则可能会对系统可靠性造成不利影响。
// <i> ------------------------------------------------------------------------
// <i> 三、互斥访问机制二
// <i> 仅推荐于Cortex-M0/M0+等不支持互斥访问指令[LDREX/STREX]的内核,可实现全局不关总中断、零中断延迟。
// <i> 服务调用规约
// <i> 仅允许用户在中断优先级号:0、1、2、3 的用户中断中调用【中断FIFO服务】。
// <i> 中断优先级号:负值的用户中断中不允许调用【中断FIFO服务】。
// <i> 注:中断优先级号为负值的中断通常仅包括 Reset_Handler、NMI_Handler、HardFault_Handler。
// <i> 这基本上已经相当于没有服务调用规约的限制。
// <i> ------------------------------------------------------------------------
// <i> 零、关闭总中断
// <i> 关闭总中断
// <i> 适用于所有ARM内核,并具有极短的、确定的关闭总中断时间,包括关闭总中断、再次开启总中断在内,
// <i> 共10个指令周期(嵌套方式);如果是非嵌套方式,仅为7个指令周期。
// <i> 内核关闭总中断仅发生在 port_cmx_s.c 中,“中断FIFO服务装载器” 中的 “__COUNT” 段。
// <i> 内核关闭总中断仅发生在 port_cmx_s.c 中,“中断FIFO服务装载器” 中的 “FIFO计数” 段。
// <i> ------------------------------------------------------------------------
// <i> 配置技巧:
// <i> 用户可优先选择 “互斥访问指令” 编译尝试,如果内核不支持该指令,编译器会给出明确提示,此时再更换其它方案。
// <i> 在中断FIFO服务的装载效率上,“互斥访问机制一” 要比 “互斥访问机制二” 高效许多,但缺点是服务调用规约的限制较大。
#define MCUCFG_PENDSVFIFO_MUTEX 1
// <q> 关闭总中断-嵌套方式
// <i> 当“中断FIFO服务装载器-互斥访问方案”选择关闭总中断时,是否采用嵌套方式?
// <i> 如果用户在中断中使用了中断锁(xDisableIRQ/xResumeIRQ)或自行关闭总中断(操作PRIMASK),推荐采用嵌套方式。
// <i> 否则可关闭嵌套方式,缩短内核关闭总中断时间(将缩短至7个指令周期)。
#define MCUCFG_PENDSVFIFO_MUTEX0 1
///////////////////////////////////////////////////////////////////////////////
// <o> PendSV_FIFO深度
// <i> 此项参数取决于您在中断中调用的FIFO服务的总数及中断的频率。
// <i> 对于Cortex-M来说,PendSV_FIFO的最大深度可为255。
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
#define MCUCFG_PENDSVFIFO_DEPTH 32
// <o> 中断FIFO服务处理器-最大并发执行数
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
// <i> 并最终导致任务不能调度运行。
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
// <i> 应设法予以解决。
#define MCUCFG_PENDSVFIFO_COUNT 256
#define MCUCFG_PENDSVFIFO_XXXXX 1
///////////////////////////////////////////////////////////////////////////////
// <q> 浮点寄存器上下文自动保存
@@ -108,15 +82,4 @@
///////////////////////////////////////////////////////////////////////////////
#if (MCUCFG_PENDSVFIFO_DEPTH > 255)
#error PendSV_FIFO深度溢出!
#endif
#define MCUCFG_OSZEROINSTALL 0
#define mSysTick_Clear()
#define mUserReg_SAVEc()
#define mUserReg_RESc()
#endif
+32
View File
@@ -0,0 +1,32 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_cmx.c
* @brief CMSIS Cortex-M Core Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#ifdef __PORT_CMX_H
/*
* 栈监控(主栈)
*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_u32_t m_msp; // main stack initial pointer
s_u32_t m_stacksize; // main stack size
s_u32_t m_stacklen_max = 0; // main stack used length of maximum
#endif
/*
* 中断FIFO服务
*/
#if (SYSCFG_PENDSVFIFO_DEPTH > 0) && (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
void *mPendSV_FIFO_X; // 互斥访问机制.FIFO替身计数器
#endif
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+107
View File
@@ -0,0 +1,107 @@
/**************************************************************************//**
* @item CosyOS-III Config
* @file mcucfg_rv32.h
* @brief RISC-V32 Core Config File
* @author 迟凯峰
* @version v3.0.7
* @date 2026.08.15
******************************************************************************/
#ifndef __MCUCFG_RV32_H
#define __MCUCFG_RV32_H
///////////////////////////////////////////////////////////////////////////////
// 中断FIFO服务装载器-互斥访问方案
// <1=> [lr][sc]指令 <2=> [amoadd]指令 <255=> 互斥访问机制 <0=> 关闭总中断(嵌套方式)
// <i> ------------------------------------------------------------------------
// [lr][sc]指令
// 可实现全局不关总中断、零中断延迟。
// 值得留意的是,青稞 V3A/V4 系列微处理器,对该指令进行了弱化处理,仅作为 lw,sw
// 执行,不再具有独占访问能力,所以不要使用。
// <i> ------------------------------------------------------------------------
// [amoadd]指令
// 可实现全局不关总中断、零中断延迟。
// 该指令执行周期可能会稍长且不确定。
// <i> ------------------------------------------------------------------------
// 互斥访问机制
// 可实现全局不关总中断、零中断延迟。
// 适用于不支持上述原子访问指令的情况,如青稞 V2 系列。
// x4(tp)、mscratch 专用于该机制下中断FIFO服务的互斥装载,用户不要使用。
// 青稞 V3/V4 系列,如果启用硬件压栈(port_rv32i_HWS.S),也会用到这两个寄存器,
// 会与互斥访问机制相冲突。
// <i> ------------------------------------------------------------------------
// 关闭总中断(嵌套方式)
// 适用于不支持上述原子访问指令的情况,如青稞 V2 系列。
// 由于在关闭总中断之后必须使用 fence.i 指令同步隔离,所以关闭总中断时间暂不确定。
#define MCUCFG_PENDSVFIFO_MUTEX 2
///////////////////////////////////////////////////////////////////////////////
// 浮点寄存器上下文自动保存
// <0=> 不保存 <1=> 保存
// 是否启用浮点寄存器的上下文自动保存功能?
// 如果存在并且启用了硬件浮点单元,同时在多个任务中都要进行浮点运算,可考虑开启该选项。
#define MCUCFG_FPU_AUTOSTORE 0
///////////////////////////////////////////////////////////////////////////////
/* 系统滴答-配置方式 */
// <0=> 手动配置 <1=> 自动配置
// 手动配置:您需自行手动配置和系统滴答有关的一切事宜;
// 例外的是,滴答中断优先级将由CosyOS自动配置为最低级。
// 自动配置:CosyOS会自动为您处理好一切事宜,开箱即用。
#define MCUCFG_SYSTICK_AUTOCONFIG 1
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#if (MCUCFG_SYSTICK_AUTOCONFIG == 1)
/* 自动配置-额外配置 */
// 如果系统滴答配置方式为自动配置,需额外配置下方定义项。
// 系统时钟频率
// 告知CosyOS您所配置的系统时钟,单位为兆赫(MHZ)。
#define MCUCFG_SYSCLK 96
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#else
/* 手动配置-额外配置 */
// 如果系统滴答配置方式为手动配置,用户仍需额外配置下方定义项,
// 用于 CosyOS-任务管理器 的CPU使用率统计、滴答时间统计等功能。
// 当然,如果您不打算使用 CosyOS-任务管理器,可不用配置。
// 默认配置仅为示例,给用户以参考和提示。
// 系统滴答-计数方式
// <1=> 从零向上计数至重装载值溢出 <2=> 从重装载值向下计数至零溢出
// <3=> 从重装载值向上计数至零溢出 <4=> 从零向下计数至重装载值溢出
// 告知CosyOS您所配置的定时器计数方式。
#define MCUCFG_SYSTICK_COUNTMODE 2
// 系统滴答-位数
// 如果定时器计数方式配置为3或4,应正确配置该定义。
#define MCUCFG_SYSTICK_BITS 32
// 系统滴答-当前值
// 应配置为可读的当前值寄存器。
#define MCUCFG_SYSTICK_CURRVALUE (*(volatile uint32_t *)0xE000F008)
// 系统滴答-重装载值
// 如果该值为常量可配置为常量,否则应配置为可读的重装载值寄存器。
#define MCUCFG_SYSTICK_LOADVALUE (*(volatile uint32_t *)0xE000F010)
// 系统滴答-时钟
// 告知CosyOS您所配置的系统滴答时钟,单位为兆赫(MHZ)。
#define MCUCFG_SYSTICK_CLK 96 // = (系统时钟 / (((*(volatile uint32_t *)0xE000F000) & 4) ? 1 : 8))
#endif
//////////////////////////////////* 系统定义 *//////////////////////////////////
// 以下为系统定义,用户不可随意修改。
#define MCUCFG_REGBYTES 4
#define MCUCFG_FPUBYTES 4
#define MCUCFG_TIMn_IRQn 12
#define MCUCFG_XXXx_IRQn 14
#define OS_PendSV_Handler SW_Handler
////////////////////////////////////////////////////////////////////////////////
#endif
+174
View File
@@ -0,0 +1,174 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_rv32.h
* @brief RISC-V32 Core Port File
* @author 迟凯峰
* @version v3.0.8
* @date 2026.08.15
******************************************************************************/
#ifndef __PORT_RV32_H
#define __PORT_RV32_H
/* INCLUDE */
#include "port_x32.h"
#include "mcucfg_rv32.h"
#include SYSCFG_STANDARDHEAD
#include "os_cmsis.h"
#include "os_stack.h"
/* CONST & ATTRIBUTE */
#define MCUCFG_STACK_ALIGN __ALIGNED(16)
#define MCUCFG_TASKSTACK_REALLOC __DISABLED__
#if (MCUCFG_FPU_AUTOSTORE == __ENABLED__)
#define MCUCFG_PUSH_FPU (32 * MCUCFG_FPUBYTES)
#else
#define MCUCFG_PUSH_FPU 0
#endif
#if !defined ( __riscv_32e )
#define MCUCFG_PUSH_REG (32 * MCUCFG_REGBYTES)
#else
#define MCUCFG_PUSH_REG (16 * MCUCFG_REGBYTES)
#endif
#define MCUCFG_BASICSTACKSIZE (MCUCFG_PUSH_FPU + MCUCFG_PUSH_REG)
/* TaskCtrl */
#define mTaskCtrl_Head_ m_sp_t psp;
#define mTaskCtrl_Tail_ m_sp_t psp_top;
/*
* SysTick
*/
#if (MCUCFG_SYSTICK_AUTOCONFIG == __ENABLED__)
/* 自动配置 */
#define MCUCFG_SYSTICK_COUNTMODE 1 /*!< 计数方式,1:从零向上计数至重装载值溢出 */
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << 32) /*!< 极限值 */
#define MCUCFG_SYSTICK_CURRVALUE *(volatile s_u32_t *)(0xE000F008) /*!< 当前值寄存器 */
#define MCUCFG_SYSTICK_CLK MCUCFG_SYSCLK
#define MCUCFG_SYSTICK_COUNT1CYC (SYSCFG_SYSTICK_CYCLE * MCUCFG_SYSTICK_CLK * 1UL)
#define MCUCFG_SYSTICK_LOADVALUE (MCUCFG_SYSTICK_COUNT1CYC - 1)
#define MCUCFG_SYSTICK_MAXVALUE MCUCFG_SYSTICK_LOADVALUE
#define MCUCFG_SYSTICK_MINVALUE 0
#if (MCUCFG_SYSTICK_COUNT1CYC > MCUCFG_SYSTICK_LIMITVALUE)
#error 系统滴答定时器溢出。
#endif
#define mSysTick_SetLOAD() *(volatile s_u32_t *)(0xE000F010) = MCUCFG_SYSTICK_LOADVALUE
#define mSysTick_SetCTRL() *(volatile s_u32_t *)(0xE000F000) = 0x2F
#define mSysTick_INIT() \
do{ \
mSysTick_SetPRI(); \
mSysTick_SetLOAD(); \
mSysTick_SetCTRL(); \
}while(false)
#else
/* 手动配置 */
#if (MCUCFG_SYSTICK_COUNTMODE == 1 || MCUCFG_SYSTICK_COUNTMODE == 2)
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LOADVALUE)
#define MCUCFG_SYSTICK_MINVALUE 0
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_LOADVALUE + 1UL)
#elif (MCUCFG_SYSTICK_COUNTMODE == 3 || MCUCFG_SYSTICK_COUNTMODE == 4)
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << MCUCFG_SYSTICK_BITS)
#define MCUCFG_SYSTICK_MAXVALUE (MCUCFG_SYSTICK_LIMITVALUE)
#define MCUCFG_SYSTICK_MINVALUE (MCUCFG_SYSTICK_LOADVALUE)
#define MCUCFG_SYSTICK_COUNT1CYC (MCUCFG_SYSTICK_MAXVALUE - MCUCFG_SYSTICK_MINVALUE)
#endif
#define mSysTick_INIT() mSysTick_SetPRI()
#endif
/*
* SysTick_Handler + PendSV_Handler
*/
/* SysTick */
#define mSysTick_SetPRI() \
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_TIMn_IRQn) = 0xFF
/* PendSV */
#define mPendSV_SetPRI() \
*(volatile s_u8_t *)(0xE000E400 + MCUCFG_XXXx_IRQn) = 0xFF
#define mPendSV_Set() \
*(volatile s_u32_t *)(0xE000E200 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
#define mPendSV_Clear() \
*(volatile s_u32_t *)(0xE000E280 + MCUCFG_XXXx_IRQn / 32 * 4) = 0x01UL << (MCUCFG_XXXx_IRQn % 32)
#define mPendSV_INIT() mPendSV_SetPRI()
/* 内核锁 */
#define mSysINT_Disable() \
*(volatile s_u32_t *)(0xE000E180 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
#define mSysINT_Enable() \
*(volatile s_u32_t *)(0xE000E100 + MCUCFG_XXXx_IRQn / 32 * 4) = (0x01UL << (MCUCFG_XXXx_IRQn % 32)) \
| (0x01UL << (MCUCFG_TIMn_IRQn % 32))
__STATIC_FORCEINLINE void __mu_disable_sysirq(void)
{
mSysINT_Disable();
__ASM("fence.i");
}
__STATIC_FORCEINLINE void __mu_enable_sysirq(void)
{
__ASM("fence rw, rw");
mSysINT_Enable();
}
/* CosyOS初始化 */
#define mCosyOS_INIT() \
do{ \
mPendSV_INIT(); \
mSysTick_INIT(); \
}while(false)
/* CosyOS低功耗 */
#define mCosyOS_IDLE() __WFI()
/* 任务栈 */
#define MCUCFG_TASKSTACK_MODE __PSP__
#define mTaskStack_Init() \
do{ \
node_news->psp_top = (m_sp_t)node_news->bsp + node_news->stacksize; \
if(node_news->psp_top % 16){ \
node_news->psp_top /= 16; \
node_news->psp_top *= 16; \
node_news->stacksize = node_news->psp_top - (m_sp_t)node_news->bsp; \
} \
mTaskStack_CheckInit(); \
mTaskStack_Reset(); \
}while(false)
#define mTaskStack_Reset() \
do{ \
node_news->psp = node_news->psp_top; \
node_news->psp -= MCUCFG_BASICSTACKSIZE; \
*(volatile s_u32_t *)(node_news->psp + MCUCFG_PUSH_FPU) = (s_u32_t)node_news->entry; /* x0(mepc) */ \
}while(false)
/* 栈监控 */
#if (SYSCFG_DEBUGGING == __ENABLED__)
#define mTaskStack_Check0() s_task_current->psp_top - __get_SP() + MCUCFG_PUSH_FPU
#define mTaskStack_Check() s_stack_check((s_u8_t *)(s_task_current->psp_top), s_task_current->stacksize)
#define mTaskStack_CheckInit() s_stack_check_init((s_u8_t *)(node_news->psp_top), node_news->stacksize)
#else
#define mTaskStack_CheckInit()
#endif
/* 内存访问屏障 */
#define __mx_MMB() __ASM("fence rw, rw")
#endif
+85
View File
@@ -0,0 +1,85 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_rv32_FSL.S
* @brief RISC-V32 Core Port File for Interrupt FIFO Service Loading
* @author 迟凯峰
* @version v3.0.7
* @date 2026.08.14
******************************************************************************/
#include "syscfg.h"
#include "mcucfg_rv32.h"
////////////////////////////////////////////////////////////////////////////////
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
/* 互斥访问机制 */
#if (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
.data
mPendSV_FIFO_X: .word 0
#endif
/* 中断FIFO服务装载器 */
.global mPendSV_FIFOLoader
.align 2
mPendSV_FIFOLoader:
/* FIFO选择 */
la a2, m_fifo_lock
lb a3, (a2)
beqz a3, 1f
la a1, mPendSV_FIFO_0
j 2f
1: la a1, mPendSV_FIFO_1
/* 计数溢出 */
2:
#if (0) // 正常情况下计数器难以溢出,默认关闭防护以提高装载效率。
lw a2, (a1)
li a3, 0x80000000
bltu a3, a2, 5f
#endif
/* FIFO计数 */
/* 关闭总中断(嵌套方式)*/
#if (MCUCFG_PENDSVFIFO_MUTEX == 0)
csrr a3, mstatus
csrc mstatus, 0x8
fence.i
lw a2, (a1)
addi a2, a2, 1
sw a2, (a1)
csrw mstatus, a3
/* [lr][sc]指令 */
#elif (MCUCFG_PENDSVFIFO_MUTEX == 1)
3: lr.w a2, (a1)
addi a2, a2, 1
sc.w a3, a2, (a1)
bnez a3, 3b
/* [amoadd]指令 */
#elif (MCUCFG_PENDSVFIFO_MUTEX == 2)
li a3, 1
amoadd.w a2, a3, (a1)
addi a2, a2, 1
/* 互斥访问机制 */
#elif (MCUCFG_PENDSVFIFO_MUTEX == 0xFF)
csrrwi a3, mscratch, 1
3: add tp, a1, zero
lw a2, (tp)
addi a2, a2, 1
sw a2, (tp)
bne tp, a1, 3b
csrw mscratch, a3
beqz a3, 4f
la tp, mPendSV_FIFO_X
#endif
/* FIFO溢出 */
4: li a3, SYSCFG_PENDSVFIFO_DEPTH
bltu a3, a2, 5f
/* FIFO装载 */
slli a2, a2, 2
add a1, a1, a2
sw a0, (a1)
5: ret
#endif
File diff suppressed because it is too large Load Diff
+73
View File
@@ -0,0 +1,73 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_rv32e_HWS.S
* @brief RV32E Core Port File for Hardware Stack
* @note 对处理器特权模式无要求。
* @note x4(tp)寄存器默认未保护,如需保护可自行开启。
* @author 迟凯峰
* @version v3.0.7
* @date 2026.08.14
******************************************************************************/
#if defined ( __riscv_32e )
#include "syscfg.h"
#include "mcucfg_rv32.h"
#define store sw
#define load lw
////////////////////////////////////////////////////////////////////////////////
/* PendSV 软中断 */
.global OS_PendSV_Handler
.align 2
OS_PendSV_Handler: // hardware push Caller
/* push Callee */
addi sp, sp, -4 * MCUCFG_REGBYTES
store x8, 1 * MCUCFG_REGBYTES(sp)
store x9, 2 * MCUCFG_REGBYTES(sp)
////store x4, 3 * MCUCFG_REGBYTES(sp) // default not store/load x4
call sPendSV_Handler
beqz a0, 2f // 直接返回
la s1, s_task_current
addi s0, a0, -1
beqz s0, 1f // 恢复现场
/* push mepc */
csrr a0, mepc
store a0, 0 * MCUCFG_REGBYTES(sp)
/* 任务-PC 监控 */
#if (SYSCFG_TASKPC_MONITOR == 1)
la a1, s_pc
sw a0, (a1)
#endif
lw t0, (s1)
sw sp, (t0)
fence rw, rw
/* 恢复现场 */
1: la t1, s_task_news
lw t0, (t1)
lw sp, (t0)
sw t0, (s1)
/* pop mepc */
load a0, 0 * MCUCFG_REGBYTES(sp)
csrw mepc, a0
/* pop Callee */
2: load x8, 1 * MCUCFG_REGBYTES(sp)
load x9, 2 * MCUCFG_REGBYTES(sp)
////load x4, 3 * MCUCFG_REGBYTES(sp) // default not store/load x4
addi sp, sp, 4 * MCUCFG_REGBYTES
mret // hardware pop Caller
////////////////////////////////////////////////////////////////////////////////
#endif
File diff suppressed because it is too large Load Diff
+90
View File
@@ -0,0 +1,90 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_x32.c
* @brief 32 bits Micro-Controller Public Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#ifdef __PORT_X32_H
/*
* 中断FIFO服务
*/
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
/**
\brief FIFO互斥访问锁
\details 入FIFO与出FIFO之间的互斥
\note if(锁) { 中断FIFO服务装载器入FIFO0,中断FIFO服务处理器出FIFO1 } <br>
else { 中断FIFO服务装载器入FIFO1,中断FIFO服务处理器出FIFO0 }
*/
bool volatile m_fifo_lock = true;
void *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH + 1]; // FIFO0
void *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH + 1]; // FIFO1
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_u32_t mPendSV_FIFO_DepthMAX/**/sZeroInstall;
s_u16_t mPendSV_FIFO_CountMAX/**/sZeroInstall;
#endif
/* 中断FIFO服务处理器 */
void mPendSV_FIFOHandler(void)
{
register s_u32_t i;
register s_u16_t j = 0;
register bool lock = 1;
register void ** p;
void ** const fifo[2] = {mPendSV_FIFO_0, mPendSV_FIFO_1};
while(true){
lock = !lock;
p = fifo[lock];
m_fifo_lock = lock;
__mx_MMB();
if(p[0]){
i = (s_u32_t)p[0];
p[0] = 0;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(i > mPendSV_FIFO_DepthMAX){
mPendSV_FIFO_DepthMAX = i;
}
#endif
if(i > SYSCFG_PENDSVFIFO_DEPTH){
i = SYSCFG_PENDSVFIFO_DEPTH;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_fault.overflow_pendsvfifo = true;
#endif
}
j += i;
do{
register void *sv = *++p;
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80)
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
#else
if(sv != OS_NULL){
*p = OS_NULL;
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
}
#endif
}while(--i);
}
if(lock){
if(0 == mPendSV_FIFO_0[0]) break;
if(j >= SYSCFG_PENDSVFIFO_COUNT) break;
}
}
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
#endif
}
#endif
#endif
+96
View File
@@ -0,0 +1,96 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_x32.h
* @brief 32 bits Micro-Controller Public Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __PORT_X32_H
#define __PORT_X32_H
/* INCLUDE */
#include "syscfg.h"
#include "os_def.h"
#include <stdbool.h>
/* LAJI */
#define _SYS_REG_
#define _SYS_MEM_
#define _OBJ_MEM_
#define _RTC_MEM_
#define _QUE_MEM_
#define _CODE_MEM_
#define _CONST_MEM_
#define _STACK_MEM_
#define _XDATA_MEM_
#define _DEBUG_MEM_
#define _STATIC_MEM_
#define _MALLOC_MEM_
/* Typedef */
#define m_boolvoid_tf
typedef char s_s8_t;
typedef short s_s16_t;
typedef int s_s32_t;
typedef unsigned char s_u8_t;
typedef unsigned short s_u16_t;
typedef unsigned int s_u32_t;
typedef bool m_bit_t;
typedef s_u32_t m_sp_t;
typedef s_u32_t m_pc_t;
typedef s_u32_t m_tick_t;
typedef s_u32_t m_group_t;
typedef s_u32_t m_fetion_t;
typedef s_u32_t m_tqcount_t;
typedef s_u32_t m_rtccount_t;
typedef s_u32_t m_stacklen_t;
typedef s_u32_t m_stacksize_t;
/* CONST & ATTRIBUTE */
#define MCUCFG_PCLEN 4
#define MCUCFG_TASK_ATTRIBUTE
#define MCUCFG_OSIT_ATTRIBUTE
#define MCUCFG_SYSTICK_ATTRIBUTE
#define MCUCFG_TERNARY_MASK
/* 中断FIFO服务-声明 */
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
extern bool volatile m_fifo_lock;
extern s_u32_t mPendSV_FIFO_DepthMAX;
extern s_u16_t mPendSV_FIFO_CountMAX;
extern void *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH + 1];
extern void *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH + 1];
extern void mPendSV_FIFOLoader (void *sv);
extern void mPendSV_FIFOHandler(void);
#endif
/* 中断FIFO服务-装载 */
#define mPendSV_FIFOLoad() \
do{ \
mPendSV_FIFOLoader(&u_psv); \
mPendSV_Set(); \
}while(false)
/* 中断FIFO服务-处理 */
#define mPendSV_FIFOHandle() \
if(mPendSV_FIFO_0[0]) mPendSV_FIFOHandler()
/* 事件标志组-中断中写多标志位 */
#define miWriteFlagBits() \
if(!u_psv.value){ \
do{}while(false)
/* 内核锁 */
#define mSysIRQ_Disable() __mu_disable_sysirq()
#define mSysIRQ_Enable() __mu_enable_sysirq()
#endif
@@ -3,8 +3,8 @@
* @file mcucfg_80251.h
* @brief 80251 Core Config File
* @author 迟凯峰
* @version V2.3.9
* @date 2026.06.20
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __MCUCFG_80251_H
@@ -72,22 +72,26 @@
// </h>
///////////////////////////////////////////////////////////////////////////////
// <o> PendSV_FIFO深度
// <0=> 0级(不启用PendSV_FIFO)<8=> 8级 <16=> 16级 <24=> 24级 <32=> 32级 <40=> 40级
// <i> 此项参数取决于您在中断中调用挂起服务的总数及中断的频率。
// <i> 对于80251来说,PendSV_FIFO的最大深度为40,您应妥善处理中断中调用的挂起服务,避免不必要的调用。
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
#define MCUCFG_PENDSVFIFO_DEPTH 32
// <o> 中断FIFO服务处理器-最大并发执行数
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
// <i> 并最终导致任务不能调度运行。
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
// <i> 应设法予以解决。
#define MCUCFG_PENDSVFIFO_COUNT 256
// <o> 中断FIFO服务装载器-互斥访问方案
// <256=> [JBC]指令 <255=> [INC]指令 <0=> 关闭总中断
// <i> ------------------------------------------------------------------------
// <i> [JBC]指令
// <i> 适用于所有80251内核,可实现全局不关总中断、零中断延迟。
// <i> 适用于FIFO服务持续并发量较小的情况。
// <i> PendSV_FIFO深度最大值:40
// <i> ------------------------------------------------------------------------
// <i> [INC]指令
// <i> 适用于所有80251内核,可实现全局不关总中断、零中断延迟。
// <i> 适用于FIFO服务持续并发量较大的情况。
// <i> PendSV_FIFO深度最大值:127
// <i> ------------------------------------------------------------------------
// <i> 关闭总中断
// <i> 适用于所有80251内核,并具有极短的、确定的关闭总中断时间,
// <i> 包括关闭总中断、再次开启总中断在内,共8个机器周期。
// <i> 内核关闭总中断仅发生在 port_80251s.s > mPendSV_FIFOPreempt 中。
// <i> 适用于FIFO服务持续并发量较大的情况。
// <i> PendSV_FIFO深度最大值:127
#define MCUCFG_PENDSVFIFO_MUTEX 256
///////////////////////////////////////////////////////////////////////////////
// <h> 动态内存设置
@@ -236,10 +240,5 @@ do{ \
#define mUserReg_Addr (node_news->bsp + 42)
#endif
#if ((MCUCFG_PENDSVFIFO_DEPTH % 8) || (MCUCFG_PENDSVFIFO_DEPTH > 40))
#error 参数非法 of 中断挂起服务FIFO队列深度!
#endif
#endif
@@ -4,8 +4,8 @@
;* @brief 80251 Core Config File
;* @details 自定义任务切换现场保护,汇编语言保护方案。
;* @author 迟凯峰
;* @version V2.0.0
;* @date 2025.08.04
;* @version v3.0.0
;* @date 2026.07.21
;*******************************************************************************
; 下方各定义项已经直接给出示例(保护/恢复:DPH1、DPL1、DPS),直接修改即可。
+114
View File
@@ -0,0 +1,114 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_80251.c
* @brief 80251 Core Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#ifdef __PORT_80251_H
s_u16_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
static s_u8_t xdata mVOID _at_ 0;
/*
* 栈监控(涵盖主栈和任务栈)
*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_u16_t data m_taskstacklen;
#if (MCUCFG_TASKSTACK_MODE == __MSP__)
s_u16_t m_msp;
s_u16_t m_stacksize;
s_u16_t m_stacklen_max/**/sZeroInstall;
#endif
#endif
/*
* 中断FIFO服务
*/
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80) \
|| (MCUCFG_PENDSVFIFO_MUTEX > 0xFF)
void _STATIC_MEM_ *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100; // FIFO0
void _STATIC_MEM_ *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0200; // FIFO1
#else
void _STATIC_MEM_ *mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100/**/sZeroInstall_Group;
void _STATIC_MEM_ *mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0200/**/sZeroInstall_Group;
#endif
/*
* [INC]指令 和 关闭总中断
*/
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x100)
/* FIFO计数器 */
s_u8_t data m_fifo_count[2]/**/sZeroInstall_Group;
/* 中断FIFO服务处理器 */
void mPendSV_FIFOHandler(void)
{
register s_u8_t i;
register s_u16_t j = 0;
register bool lock = 1;
register void _STATIC_MEM_ * _STATIC_MEM_ * p;
void _STATIC_MEM_ * _STATIC_MEM_ * const fifo[2] = {
mPendSV_FIFO_0 - 1,
mPendSV_FIFO_1 - 1
};
while(true){
lock = !lock;
p = fifo[lock];
m_fifo_lock = lock;
__mx_MMB();
if(m_fifo_count[lock]){
i = m_fifo_count[lock];
m_fifo_count[lock] = 0;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(i > mPendSV_FIFO_DepthMAX){
mPendSV_FIFO_DepthMAX = i;
}
#endif
if(i > SYSCFG_PENDSVFIFO_DEPTH){
i = SYSCFG_PENDSVFIFO_DEPTH;
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
s_fault.overflow_pendsvfifo = true;
#endif
}
j += i;
do{
register void _STATIC_MEM_ *sv = *++p;
#if (MCUCFG_PENDSVFIFO_MUTEX < 0x80)
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
#else
if(sv != OS_NULL){
*p = OS_NULL;
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
}
#endif
}while(--i);
}
if(lock){
if(0 == m_fifo_count[0]) break;
if(j >= SYSCFG_PENDSVFIFO_COUNT) break;
}
}
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(mPendSV_FIFO_CountMAX < j) mPendSV_FIFO_CountMAX = j;
#endif
}
#endif
#endif
#endif
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -3,12 +3,11 @@
;* @file startup_80251.s
;* @brief 80251 Core Startup File
;* @author 迟凯峰
;* @version V2.0.0
;* @date 2025.08.04
;* @version v3.0.0
;* @date 2026.07.21
;*******************************************************************************
;
$INCLUDE (syscfg.h)
IF SYSCFG_MCUCORE == 80251
IF __A251__
$INCLUDE (mcucfg_80251.h)
;
;///////////////////////////////////////////////////////////////////////////////
@@ -3,8 +3,8 @@
* @file mcucfg_8051.h
* @brief 8051 Core Config File
* @author 迟凯峰
* @version V2.3.1
* @date 2026.03.01
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __MCUCFG_8051_H
@@ -75,24 +75,6 @@
#define mPendSV_Clear CLR IE0
// </h>
///////////////////////////////////////////////////////////////////////////////
// <o> PendSV_FIFO深度
// <0=> 0级(不启用PendSV_FIFO)<8=> 8级 <16=> 16级 <24=> 24级 <32=> 32级 <40=> 40级
// <i> 此项参数取决于您在中断中调用挂起服务的总数及中断的频率。
// <i> 对于8051来说,PendSV_FIFO的最大深度为40,您应妥善处理中断中调用的挂起服务,避免不必要的调用。
// <i> 可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
#define MCUCFG_PENDSVFIFO_DEPTH 16
// <o> 中断FIFO服务处理器-最大并发执行数
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
// <i> 并最终导致任务不能调度运行。
// <i> 该值通常建议在“PendSV_FIFO深度值的2~10倍之间”选取,不建议过大或过小。
// <i> 可开启PendSV_FIFO监控功能,监控“实际并发执行数”在历史上的最大值,如果过大说明设计存在不合理因素,
// <i> 应设法予以解决。
#define MCUCFG_PENDSVFIFO_COUNT 128
///////////////////////////////////////////////////////////////////////////////
// <h> 动态内存设置
// <i> CosyOS会使用下列参数自动初始化内存池。
@@ -234,6 +216,8 @@ do{ \
#define _QUE_MEM_ xdata
#endif
#define MCUCFG_PENDSVFIFO_MUTEX 0x100
#if (!__MCUCFG_USERREGSAVE_C)
#define mUserReg_DEFc_
#define mUserReg_SAVEc()
@@ -253,10 +237,5 @@ do{ \
#endif
#endif
#if ((MCUCFG_PENDSVFIFO_DEPTH % 8) || (MCUCFG_PENDSVFIFO_DEPTH > 40))
#error 参数非法 of 中断挂起服务FIFO队列深度!
#endif
#endif
@@ -4,8 +4,8 @@
;* @brief 8051 Core Config File
;* @details 自定义任务切换现场保护,汇编语言保护方案。
;* @author 迟凯峰
;* @version V2.0.0
;* @date 2025.08.04
;* @version v3.0.0
;* @date 2026.07.21
;*******************************************************************************
;
; 请在 mcucfg_8051.h 文件中,选择您中意的保护方案,而后在下面重新调整代码。
+38
View File
@@ -0,0 +1,38 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_8051.c
* @brief 8051 Core Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#ifdef __PORT_8051_H
s_u8_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
/*
* 栈监控(涵盖主栈和任务栈)
*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_u8_t data m_taskstacklen;
s_u8_t m_msp;
s_u8_t m_stacksize;
s_u8_t m_stacklen_max/**/sZeroInstall;
#endif
/*
* 中断FIFO服务
*/
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
s_u16_t mPendSV_FIFO_0[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0000;
s_u16_t mPendSV_FIFO_1[SYSCFG_PENDSVFIFO_DEPTH] _at_ 0x0100;
#else
static s_u8_t xdata mVOID _at_ 0;
#endif
#endif
File diff suppressed because it is too large Load Diff
@@ -3,13 +3,13 @@
;* @file port_8051s.s
;* @brief 8051 Core Port File
;* @author 迟凯峰
;* @version V2.3.9
;* @date 2026.06.20
;* @version v3.0.0
;* @date 2026.07.21
;*******************************************************************************
;
IF __A51__
$NOMOD51
$INCLUDE (syscfg.h)
IF SYSCFG_MCUCORE == 8051
$INCLUDE (mcucfg_8051.h)
$INCLUDE (mcucfg_8051.inc)
;
@@ -304,14 +304,13 @@ ENDIF
; 中断FIFO服务
IF MCUCFG_PENDSVFIFO_DEPTH > 0
IF SYSCFG_PENDSVFIFO_DEPTH > 0
; 中断FIFO服务-抢占队列项
?PR?mPendSV_FIFOPreempt?PORT_8051S SEGMENT CODE
EXTRN BIT (m_sign_fifo)
EXTRN DATA (m_fifo_0_count)
EXTRN DATA (m_fifo_1_count)
EXTRN BIT (m_fifo_lock)
EXTRN DATA (m_fifo_count)
EXTRN BIT (m_sign_fifo_0_0)
EXTRN BIT (m_sign_fifo_0_1)
@@ -329,7 +328,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 0
EXTRN BIT (m_sign_fifo_1_5)
EXTRN BIT (m_sign_fifo_1_6)
EXTRN BIT (m_sign_fifo_1_7)
IF MCUCFG_PENDSVFIFO_DEPTH > 8
IF SYSCFG_PENDSVFIFO_DEPTH > 8
EXTRN BIT (m_sign_fifo_0_8)
EXTRN BIT (m_sign_fifo_0_9)
EXTRN BIT (m_sign_fifo_0_10)
@@ -346,7 +345,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 8
EXTRN BIT (m_sign_fifo_1_13)
EXTRN BIT (m_sign_fifo_1_14)
EXTRN BIT (m_sign_fifo_1_15)
IF MCUCFG_PENDSVFIFO_DEPTH > 16
IF SYSCFG_PENDSVFIFO_DEPTH > 16
EXTRN BIT (m_sign_fifo_0_16)
EXTRN BIT (m_sign_fifo_0_17)
EXTRN BIT (m_sign_fifo_0_18)
@@ -363,7 +362,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 16
EXTRN BIT (m_sign_fifo_1_21)
EXTRN BIT (m_sign_fifo_1_22)
EXTRN BIT (m_sign_fifo_1_23)
IF MCUCFG_PENDSVFIFO_DEPTH > 24
IF SYSCFG_PENDSVFIFO_DEPTH > 24
EXTRN BIT (m_sign_fifo_0_24)
EXTRN BIT (m_sign_fifo_0_25)
EXTRN BIT (m_sign_fifo_0_26)
@@ -380,7 +379,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 24
EXTRN BIT (m_sign_fifo_1_29)
EXTRN BIT (m_sign_fifo_1_30)
EXTRN BIT (m_sign_fifo_1_31)
IF MCUCFG_PENDSVFIFO_DEPTH > 32
IF SYSCFG_PENDSVFIFO_DEPTH > 32
EXTRN BIT (m_sign_fifo_0_32)
EXTRN BIT (m_sign_fifo_0_33)
EXTRN BIT (m_sign_fifo_0_34)
@@ -407,7 +406,7 @@ mPendSV_FIFOPreempt:
CLR A
MOV DPH, A
JB m_sign_fifo, FIFO_0
JB m_fifo_lock, FIFO_0
INC DPH
LJMP FIFO_1
@@ -419,7 +418,7 @@ FIFO_0: JBC m_sign_fifo_0_0, FIFO_X_0
JBC m_sign_fifo_0_5, FIFO_X_5
JBC m_sign_fifo_0_6, FIFO_X_6
JBC m_sign_fifo_0_7, FIFO_X_7
IF MCUCFG_PENDSVFIFO_DEPTH > 8
IF SYSCFG_PENDSVFIFO_DEPTH > 8
JBC m_sign_fifo_0_8, FIFO_X_8
JBC m_sign_fifo_0_9, FIFO_X_9
JBC m_sign_fifo_0_10, FIFO_X_10
@@ -428,7 +427,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 8
JBC m_sign_fifo_0_13, FIFO_X_13
JBC m_sign_fifo_0_14, FIFO_X_14
JBC m_sign_fifo_0_15, FIFO_X_15
IF MCUCFG_PENDSVFIFO_DEPTH > 16
IF SYSCFG_PENDSVFIFO_DEPTH > 16
JBC m_sign_fifo_0_16, FIFO_X_16
JBC m_sign_fifo_0_17, FIFO_X_17
JBC m_sign_fifo_0_18, FIFO_X_18
@@ -437,7 +436,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 16
JBC m_sign_fifo_0_21, FIFO_X_21
JBC m_sign_fifo_0_22, FIFO_X_22
JBC m_sign_fifo_0_23, FIFO_X_23
IF MCUCFG_PENDSVFIFO_DEPTH > 24
IF SYSCFG_PENDSVFIFO_DEPTH > 24
JBC m_sign_fifo_0_24, FIFO_X_24
JBC m_sign_fifo_0_25, FIFO_X_25
JBC m_sign_fifo_0_26, FIFO_X_26
@@ -446,7 +445,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 24
JBC m_sign_fifo_0_29, FIFO_X_29
JBC m_sign_fifo_0_30, FIFO_X_30
JBC m_sign_fifo_0_31, FIFO_X_31
IF MCUCFG_PENDSVFIFO_DEPTH > 32
IF SYSCFG_PENDSVFIFO_DEPTH > 32
JBC m_sign_fifo_0_32, FIFO_X_32
JBC m_sign_fifo_0_33, FIFO_X_33
JBC m_sign_fifo_0_34, FIFO_X_34
@@ -459,7 +458,7 @@ ENDIF
ENDIF
ENDIF
ENDIF
INC m_fifo_0_count
INC m_fifo_count
INC A
RET
@@ -479,7 +478,7 @@ FIFO_X_6: MOV R0, #6*2
RET
FIFO_X_7: MOV R0, #7*2
RET
IF MCUCFG_PENDSVFIFO_DEPTH > 8
IF SYSCFG_PENDSVFIFO_DEPTH > 8
FIFO_X_8: MOV R0, #8*2
RET
FIFO_X_9: MOV R0, #9*2
@@ -496,7 +495,7 @@ FIFO_X_14: MOV R0, #14*2
RET
FIFO_X_15: MOV R0, #15*2
RET
IF MCUCFG_PENDSVFIFO_DEPTH > 16
IF SYSCFG_PENDSVFIFO_DEPTH > 16
FIFO_X_16: MOV R0, #16*2
RET
FIFO_X_17: MOV R0, #17*2
@@ -513,7 +512,7 @@ FIFO_X_22: MOV R0, #22*2
RET
FIFO_X_23: MOV R0, #23*2
RET
IF MCUCFG_PENDSVFIFO_DEPTH > 24
IF SYSCFG_PENDSVFIFO_DEPTH > 24
FIFO_X_24: MOV R0, #24*2
RET
FIFO_X_25: MOV R0, #25*2
@@ -530,7 +529,7 @@ FIFO_X_30: MOV R0, #30*2
RET
FIFO_X_31: MOV R0, #31*2
RET
IF MCUCFG_PENDSVFIFO_DEPTH > 32
IF SYSCFG_PENDSVFIFO_DEPTH > 32
FIFO_X_32: MOV R0, #32*2
RET
FIFO_X_33: MOV R0, #33*2
@@ -560,7 +559,7 @@ FIFO_1: JBC m_sign_fifo_1_0, FIFO_X_0
JBC m_sign_fifo_1_5, FIFO_X_5
JBC m_sign_fifo_1_6, FIFO_X_6
JBC m_sign_fifo_1_7, FIFO_X_7
IF MCUCFG_PENDSVFIFO_DEPTH > 8
IF SYSCFG_PENDSVFIFO_DEPTH > 8
JBC m_sign_fifo_1_8, FIFO_X_8
JBC m_sign_fifo_1_9, FIFO_X_9
JBC m_sign_fifo_1_10, FIFO_X_10
@@ -569,7 +568,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 8
JBC m_sign_fifo_1_13, FIFO_X_13
JBC m_sign_fifo_1_14, FIFO_X_14
JBC m_sign_fifo_1_15, FIFO_X_15
IF MCUCFG_PENDSVFIFO_DEPTH > 16
IF SYSCFG_PENDSVFIFO_DEPTH > 16
JBC m_sign_fifo_1_16, FIFO_X_16
JBC m_sign_fifo_1_17, FIFO_X_17
JBC m_sign_fifo_1_18, FIFO_X_18
@@ -578,7 +577,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 16
JBC m_sign_fifo_1_21, FIFO_X_21
JBC m_sign_fifo_1_22, FIFO_X_22
JBC m_sign_fifo_1_23, FIFO_X_23
IF MCUCFG_PENDSVFIFO_DEPTH > 24
IF SYSCFG_PENDSVFIFO_DEPTH > 24
JBC m_sign_fifo_1_24, FIFO_X_24
JBC m_sign_fifo_1_25, FIFO_X_25
JBC m_sign_fifo_1_26, FIFO_X_26
@@ -587,7 +586,7 @@ IF MCUCFG_PENDSVFIFO_DEPTH > 24
JBC m_sign_fifo_1_29, FIFO_X_29
JBC m_sign_fifo_1_30, FIFO_X_30
JBC m_sign_fifo_1_31, FIFO_X_31
IF MCUCFG_PENDSVFIFO_DEPTH > 32
IF SYSCFG_PENDSVFIFO_DEPTH > 32
JBC m_sign_fifo_1_32, FIFO_X_32
JBC m_sign_fifo_1_33, FIFO_X_33
JBC m_sign_fifo_1_34, FIFO_X_34
@@ -600,7 +599,7 @@ ENDIF
ENDIF
ENDIF
ENDIF
INC m_fifo_1_count
INC m_fifo_count+1
INC A
RET
@@ -3,13 +3,12 @@
;* @file startup_8051.s
;* @brief 8051 Core Startup File
;* @author 迟凯峰
;* @version V2.0.0
;* @date 2025.08.04
;* @version v3.0.0
;* @date 2026.07.21
;*******************************************************************************
;
IF __A51__
$NOMOD51
$INCLUDE (syscfg.h)
IF SYSCFG_MCUCORE == 8051
;
;-------------------------------------------------------------------------------
; 基于 STARTUP.A51 修改,摒弃了一些不常用的或用不到的功能,并添加中文注释。
File diff suppressed because it is too large Load Diff
+104
View File
@@ -0,0 +1,104 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file port_x51.h
* @brief 80x51 Core Port File
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __PORT_X51_H
#define __PORT_X51_H
/* INCLUDE */
#include "syscfg.h"
#include "os_def.h"
#include <intrins.h>
/* Typedef */
typedef char s_s8_t;
typedef short s_s16_t;
typedef long s_s32_t;
typedef unsigned char s_u8_t;
typedef unsigned short s_u16_t;
typedef unsigned long s_u32_t;
typedef s_u8_t bool;
typedef bit m_bit_t;
typedef s_u32_t m_group_t;
#if (SYSCFG_SYSTICK_CYCLE > 1000000UL / 65536)
typedef s_u16_t m_rtccount_t;
#else
typedef s_u32_t m_rtccount_t;
#endif
/* Extern */
extern void mx_disable_irq(void);
extern void mx_resume_irq (void);
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
extern bit m_sign_fifo_0_0;
extern bit m_fifo_lock;
extern s_u8_t data m_fifo_count[2];
extern s_u8_t mPendSV_FIFO_DepthMAX;
extern s_u16_t mPendSV_FIFO_CountMAX;
extern void mPendSV_FIFOHandler(void);
#endif
/* CONST & ATTRIBUTE */
#define MCUCFG_STACK_ALIGN
/* SysTick */
#define MCUCFG_SYSTICK_COUNTMODE 3 /*!< 计数方式,3:从重装载值向上计数至零溢出 */
#define MCUCFG_SYSTICK_LIMITVALUE (1UL << 16) /*!< 极限值 */
#define MCUCFG_SYSTICK_CLKDIV ((MCUCFG_SYSCLKHZ / 1000UL * SYSCFG_SYSTICK_CYCLE <= MCUCFG_SYSTICK_MAXVALUE * 1000UL) ? 1 : 12)
#define MCUCFG_SYSTICK_COUNT1CYC ((MCUCFG_SYSCLKHZ / 1000UL * SYSCFG_SYSTICK_CYCLE) / MCUCFG_SYSTICK_CLKDIV / 1000UL)
#define MCUCFG_SYSTICK_LOADVALUE (MCUCFG_SYSTICK_LIMITVALUE - MCUCFG_SYSTICK_COUNT1CYC)
#define MCUCFG_SYSTICK_MAXVALUE MCUCFG_SYSTICK_LIMITVALUE
#define MCUCFG_SYSTICK_MINVALUE MCUCFG_SYSTICK_LOADVALUE
/* 内核锁 */
#define mSysIRQ_Disable() \
do{ \
mPendSV_Disable(); \
mSysTick_Disable(); \
}while(false)
#define mSysIRQ_Enable() \
do{ \
mSysTick_Enable(); \
mPendSV_Enable(); \
}while(false)
/* CosyOS初始化 */
#define mCosyOS_INIT() \
do{ \
s_init_mempool((void _MALLOC_MEM_ *)MCUCFG_MALLOCMEMBPTR, MCUCFG_MALLOCMEMSIZE); \
OS_NOP(1); \
mSysTick_INIT(); \
EA = 1; \
}while(false)
/* CosyOS低功耗 */
#define mCosyOS_IDLE() \
do{ \
PCON |= 0x01; \
OS_NOP(4); \
}while(false)
/* 全局临界区 */
#define mxDisableIRQ() mx_disable_irq()
#define mxResumeIRQ() mx_resume_irq()
/* 内存访问屏障 */
#define __mx_MMB()
#endif
+45 -9
View File
@@ -3,8 +3,8 @@
* @file syscfg.h
* @brief OS Config File
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.28
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SYSCFG_H
@@ -18,9 +18,9 @@
// <h> 系统配置
// <i> 系统配置
// <o> MCU内核
// <1=> 8051 <2=> 80251 <3=> Cortex-M
// <i> 告知CosyOS您的MCU内核,CosyOS将自动包含相匹配的MCU配置文件和PORT文件。
// <o> 处理器架构
// <1=> 8051 <2=> 80251 <3=> Cortex-M <4=> RISC-V32
// <i> 告知CosyOS您的处理器架构,CosyOS将自动包含相匹配的MCU配置文件和PORT文件。
#define __SYSCFG_MCUCORE 3
// <s> 标准头文件
@@ -58,11 +58,36 @@
// <i> 您也可不启用该功能,并自行配置自己的低功耗,在 idle_hook 中。
#define SYSCFG_LOWPOWERMODE 0
// <h> 中断FIFO服务
// <i> 中断FIFO服务
// <o> PendSV_FIFO深度
// <i> 1、此项参数取决于您在中断中调用的FIFO服务总数及中断的频率。
// <i> 2、对于8051来说,该值只能在 0/8/16/24/32/40 之中选取,其中0为不使用中断FIFO服务。
// <i> 3、对于80251来说,如果中断FIFO服务装载器-互斥访问方案选择为[JBC]指令,
// <i> 该值只能在 0/8/16/24/32/40 之中选取,其中0为不使用中断FIFO服务。
// <i> 4、对于80251来说,如果中断FIFO服务装载器-互斥访问方案选择为[INC]指令或关闭总中断,
// <i> 该值可在 0~127 之间选取,其中0为不使用中断FIFO服务。
// <i> 5、对于 ARM、RISC-V 等新型架构来说,该值可在 0~255 之间选取,其中0为不使用中断FIFO服务。
// <i> 6、可开启PendSV_FIFO监控功能,监控历史上的最大值,再适当增大,以确保其不会溢出。
#define SYSCFG_PENDSVFIFO_DEPTH 32
// <o> 中断FIFO服务处理器-最大并发执行数
// <i> 中断FIFO服务处理器在一次运行中,允许执行服务的最大数量。
// <i> 如果超出这个数值,中断FIFO服务处理器将主动退出运行,而后继续执行任务调度/切换。
// <i> 该功能可防止因中断FIFO服务的多阶段持续并发而导致的中断FIFO服务处理器死锁(永远有执行不完的服务),
// <i> 并最终导致任务不能调度运行。
// <i> 该值通常建议在PendSV_FIFO深度值的2~10倍之间选取,不建议过大或过小。
// <i> 可开启PendSV_FIFO监控功能,监控实际并发执行数在历史上的最大值,如果过大说明设计存在不合理因素,
// <i> 应设法予以解决。
#define SYSCFG_PENDSVFIFO_COUNT 256
// <q> 中断FIFO服务-错误调用返回
// <i> 是否启用中断FIFO服务-错误调用返回?
// <i> 启用该功能后,当中断FIFO服务执行失败时,可在相应的回调函数中处理善后。
#define SYSCFG_PENDSVFIFO_ERRORCALLBACK 0
// </h>
// </h>
///////////////////////////////////////////////////////////////////////////////
// <e> DEBUG配置
@@ -81,7 +106,7 @@
// <i> 标准模式:创建任务-尾参数,为任务名称文本。
// <i> 兼容模式:创建任务-尾参数,如果输入字符串,则为任务名称文本;如果输入0,任务名称文本自动引用任务名称。
// <i> 兼容模式,某些编译器(Keil C51、C251),不能正常支持。
#define __SYSCFG_CREATETASKCUSTOM 0
#define __SYSCFG_CREATETASKCUSTOM 2
// <o> 任务名称最大长度
// <i> 取值范围:<8-255>
@@ -164,11 +189,11 @@
// <o> Starter-StackSize
// <i> 任务启动器的任务栈大小,单位为字节数(Bytes)。
#define SYSCFG_STACKSIZE_STARTER 384
#define SYSCFG_STACKSIZE_STARTER 512
// <o> Sysidle-StackSize
// <i> 系统空闲任务的任务栈大小,单位为字节数(Bytes)。
#define SYSCFG_STACKSIZE_SYSIDLE 256
#define SYSCFG_STACKSIZE_SYSIDLE 384
// <o> 任务栈重分配增量
// <i> 当任务栈模式为MSP模式、任务为动态创建时,CosyOS将自动启用任务栈重分配机制,以抵御任务栈溢出的风险。
@@ -445,6 +470,8 @@
#define SYSCFG_MCUCORE 80251
#elif (__SYSCFG_MCUCORE == 3)
#define SYSCFG_MCUCORE cmx // Cortex-M
#elif (__SYSCFG_MCUCORE == 4)
#define SYSCFG_MCUCORE rv32 // RISC-V32
#endif
#if (SYSCFG_DEBUGGING == 0)
@@ -470,6 +497,16 @@
#define SYSCFG_STARTERCREATE d
#endif
#if defined ( __C51__ )
#if ((SYSCFG_PENDSVFIFO_DEPTH % 8) || (SYSCFG_PENDSVFIFO_DEPTH > 40))
#error 参数非法 of 中断挂起服务FIFO队列深度!
#endif
#elif !defined ( __C251__ )
#if (SYSCFG_PENDSVFIFO_DEPTH > 255)
#error 参数非法 of 中断挂起服务FIFO队列深度!
#endif
#endif
#ifdef SYSCFG_TASKNAMELEN_MAX
#if (SYSCFG_TASKNAMELEN_MAX < 8 || SYSCFG_TASKNAMELEN_MAX > 255)
#error 参数非法 of 任务名称最大长度!
@@ -497,5 +534,4 @@
#endif
#endif
+16 -12
View File
@@ -2,21 +2,23 @@
![Author](https://img.shields.io/badge/Author-迟凯峰-red?style=flat-square)
![languge](https://img.shields.io/badge/languge-C、Asm-blue)
![license](https://img.shields.io/badge/license-Apache2.0-brightgreen.svg)
![version](https://img.shields.io/badge/version-2.4.1-green)
![version](https://img.shields.io/badge/version-3.0.8-green)
[![star](https://gitee.com/cosyos/cosyos/badge/star.svg?theme=dark)](https://gitee.com/cosyos/cosyos/stargazers)
[![fork](https://gitee.com/cosyos/cosyos/badge/fork.svg?theme=dark)](https://gitee.com/cosyos/cosyos/members)
* CosyOS-QQ交流群:303421780.
### 移植流程
* **裸机工程**
先准备好项目的裸机工程。
* **升级安装**
参照 Setup\readme.txt 中的说明,把 裸机工程 升级为 CosyOS工程。
* **系统构建**
打开工程,参照 CosyOS-例程(系统构建)> readme.txt 中的说明,完成系统构建。<br>
### 最新消息
CosyOS-III V3.0.1 版本发布,针对 RISC-V32,推出了自研先进技术,可实现 **CH32V 全程开启硬件压栈** 。该技术为纯软件实现,不依赖特定硬件(0x804->bit5),V103、203 等皆可完美支持。
现在,您可以愉快的使用CosyOS了!
### 移植流程
**Cube安装方式:** <br>
**1、裸机工程** 先准备好项目的裸机工程。<br>
**2、升级安装** 运行 CosyOS-III Cube.exe,把 裸机工程 升级为 CosyOS工程。<br>
**3、系统构建** 打开工程,参照 CosyOS-例程(系统构建)> readme.txt 中的说明,完成系统构建。<br>
**手动移植方式:** <br>
RISC-V32 暂不支持 Cube安装,只能自行手动移植,移植可参考 Demo-Build/RISC-V32/readme.txt 中的说明,如移植过程中遇到问题可加入社区获取工程模板和技术支持。
### 序言
* 近年来,随着RTOS的普及及在嵌入式设备中的广泛应用,以关闭总中断等方式来保护临界段所带来的危害性(丢失响应、处理延误)正日益凸显出来,其中以高速通讯接收丢帧、高速捕获丢失脉冲等中断丢失响应现象最为紧要和普遍。有些RTOS关闭总中断可能过于频繁,且未能提供“系统最大关闭总中断时间”等核心关键参数,实时性有待商榷。<br>
@@ -129,8 +131,8 @@ void start_hook(void)
![任务管理器](images/taskmgr.png "任务管理器")<br>
-—————— CosyOS-III 任务管理器 ——————-
### 支持内核
CosyOS 现支持 8051、80251、Cortex-M 等内核,未来会陆续添加对其它内核的支持。<br>
### 支持架构
CosyOS 现支持 8051、80251、Cortex-M、RISC-V32 等架构,未来会陆续添加对其它架构的支持。<br>
### 编译环境
CosyOS 现支持 keil C51、C251、MDK-Arm(AC5、AC6),GCC-Arm,IAR-EWARM 等主流编译器,<br>
@@ -147,7 +149,9 @@ CosyOS 现支持 keil C51、C251、MDK-Arm(AC5、AC6),GCC-Arm,IAR-EWARM
| **Demo-Service** | **例程文件** <br>例程文件 for 服务应用 <br> _不会通过安装程序添加到工程中,用户需自行查阅。_ |
### 文档中心
#### [API用户参考手册](https://gitee.com/cosyos/cosyos/blob/master/CosyOS-III%20API%E7%94%A8%E6%88%B7%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%20V2.3.4.chm)
#### [API用户参考手册](https://gitee.com/cosyos/cosyos/blob/master/CosyOS-III%20API%E7%94%A8%E6%88%B7%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%20v3.0.0.chm)
**[CosyOS官网](https://www.cosyos.com/)** 为大家提供了丰富的说明文档,包括 内核原理、开发指南、注意事项、疑难解答 等,可前往查阅。
### 参与贡献
Binary file not shown.
+4 -5
View File
@@ -4,14 +4,14 @@
* @brief 系统链接头文件
* @details 用户的各个c文件中应包含此文件。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.28
* @version v3.0.8
* @date 2026.08.15
******************************************************************************/
#ifndef __COSYOS_H
#define __COSYOS_H
#define COSYOS3_VERSION "v2.4.1"
#define COSYOS3_VERSION "v3.0.8"
#include "os_var.h"
#include "os_api.h"
@@ -22,9 +22,8 @@
#include "sv_pend.h"
#include "sv_task.h"
#include "sv_tick.h"
#include "ur_api.h"
#include "ur_eapi.h"
#include "ur_api.h"
#endif
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_api.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V2.3.5
* @date 2026.06.10
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __OS_API_H
-22
View File
@@ -1,22 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_base.h
* @brief 基本数据类型定义
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __OS_BASE_H
#define __OS_BASE_H
typedef char s_s8_t;
typedef short s_s16_t;
typedef long s_s32_t;
typedef unsigned char s_u8_t;
typedef unsigned short s_u16_t;
typedef unsigned long s_u32_t;
typedef s_u8_t s_ecode_t; /*!< 错误码类型 */
#endif
@@ -1,19 +1,63 @@
/**************************************************************************//**
* @item CosyOS-III Port
* @file cmsis_specific.h
* @item CosyOS-III Kernel
* @file os_cmsis.h
* @brief CMSIS compiler specific defines
* @author 迟凯峰
* @version V2.0.0
* @date 2025.08.04
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __CMSIS_SPECIFIC_H
#define __CMSIS_SPECIFIC_H
#ifndef __OS_CMSIS_H
#define __OS_CMSIS_H
/*
* Keil C51
*/
#if defined ( __C51__ )
#ifndef __WEAK
#define __WEAK
#endif
#ifndef __NOP
#define __NOP _nop_
#endif
#ifndef __STATIC_FORCEINLINE
#define __STATIC_FORCEINLINE static
#endif
#ifndef __NOINLINE
#define __NOINLINE
#endif
#ifndef __UNUSED
#define __UNUSED(X) X = X
#endif
/*
* Keil C251
*/
#elif defined ( __C251__ )
#ifndef __WEAK
#define __WEAK
#endif
#ifndef __NOP
#define __NOP _nop_
#endif
#ifndef __STATIC_FORCEINLINE
#define __STATIC_FORCEINLINE static
#endif
#ifndef __NOINLINE
#define __NOINLINE
#endif
#ifndef __UNUSED
#define __UNUSED(X) void *p_##X = (void *)X
#endif
/*
* Arm Compiler 4/5
*/
#if defined ( __CC_ARM )
#elif defined ( __CC_ARM )
#ifndef __ASM
#define __ASM __asm
@@ -36,7 +80,9 @@
#ifndef __NOINLINE
#define __NOINLINE __attribute__((noinline))
#endif
#ifndef __UNUSED
#define __UNUSED(X) (void)X
#endif
/*
@@ -65,7 +111,9 @@
#ifndef __NOINLINE
#define __NOINLINE __attribute__((noinline))
#endif
#ifndef __UNUSED
#define __UNUSED(X) (void)X
#endif
/*
@@ -94,7 +142,9 @@
#ifndef __NOINLINE
#define __NOINLINE __attribute__((noinline))
#endif
#ifndef __UNUSED
#define __UNUSED(X) (void)X
#endif
/*
@@ -135,7 +185,9 @@
#ifndef __NOINLINE
#define __NOINLINE //_Pragma("optimize = no_inline")
#endif
#ifndef __UNUSED
#define __UNUSED(X) (void)X
#endif
/*
+2 -2
View File
@@ -4,8 +4,8 @@
* @brief DEBUG接口
* @details DEBUG接口,串口发送和接收解析。
* @author 迟凯峰
* @version V2.3.5
* @date 2026.06.10
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_def.h
* @brief 初始宏定义
* @author 迟凯峰
* @version V2.4.0
* @date 2026.06.22
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __OS_DEF_H
+28 -13
View File
@@ -3,8 +3,8 @@
* @file os_handler.c
* @brief tCosyTick_Handler and sPendSV_Handler
* @author 迟凯峰
* @version V2.4.0
* @date 2026.06.22
* @version v3.0.4
* @date 2026.08.07
******************************************************************************/
#include "os_var.h"
@@ -41,7 +41,9 @@ __IAR_WEAK void tCosyTick_Handler(void) MCUCFG_SYSTICK_ATTRIBUTE
s_taskctrl_tsp _SYS_REG_ htask;
/* 清除中断标志位 */
#if defined ( __C51__ ) || defined ( __C251__ )
mSysTick_Clear();
#endif
if(s_task_current == OS_NULL) return;
@@ -473,6 +475,9 @@ __IAR_WEAK s_u8_t _start_task_(void) MCUCFG_OSIT_ATTRIBUTE
sa_insert_taskque(node_news);
s_task_queue_count++;
if(s_task_starter.status == OS_STATUS_READY){
if(s_task_current == OS_NULL){
s_task_current = node_news;
}
sa_add_ready(node_news);
}
s_task_starter._ecode = OS_ECODE_NOERROR;
@@ -485,7 +490,9 @@ __IAR_WEAK s_u8_t _start_task_(void) MCUCFG_OSIT_ATTRIBUTE
usedtime[1] = MCUCFG_SYSTICK_CURRVALUE;
}
#endif
#if defined ( __C51__ ) || defined ( __C251__ )
mUserReg_RESc();
#endif
s_task_news = Starter;
return 1;
}
@@ -495,13 +502,13 @@ __IAR_WEAK s_u8_t _start_task_(void) MCUCFG_OSIT_ATTRIBUTE
}
void pendsv_hook(void);
#if (SYSCFG_MCUCORE == 80251)
#if defined ( __C251__ )
#pragma functions(static)
#endif
__IAR_WEAK s_u8_t sPendSV_Handler(void) MCUCFG_OSIT_ATTRIBUTE
{
/* 中断FIFO服务 */
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
mPendSV_FIFOHandle();
#endif
@@ -510,6 +517,15 @@ __IAR_WEAK s_u8_t sPendSV_Handler(void) MCUCFG_OSIT_ATTRIBUTE
pendsv_hook();
#endif
/* 任务启动 */
if(!s_sign_startup){
s_sign_startup = true;
if(s_task_starter.hload != OS_NULL){
s_u8_t r = _start_task_();
if(r < 2) return r;
}
}
/* 每监控(每PendSV假定切换任务)*/
#if (SYSCFG_DEBUGGING == __ENABLED__)
if(s_task_current != OS_NULL){
@@ -523,20 +539,15 @@ __IAR_WEAK s_u8_t sPendSV_Handler(void) MCUCFG_OSIT_ATTRIBUTE
}
#endif
/* 任务启动 */
if(!s_sign_startup){
s_sign_startup = true;
if(s_task_starter.hload != OS_NULL){
s_u8_t r = _start_task_();
if(r < 2) return r;
}
}
/* 任务调度 */
if(s_sign_schedule.total) return 0;
else{
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if defined ( __GNUC__ )
m_tick_t _SYS_REG_ ticktemp_0 = 0;
#else
m_tick_t _SYS_REG_ ticktemp_0;
#endif
m_bit_t push_sign = false; /*!< 入栈信号 */
#else
#define push_sign true
@@ -677,7 +688,9 @@ __IAR_WEAK s_u8_t sPendSV_Handler(void) MCUCFG_OSIT_ATTRIBUTE
_cpu_usedtime_(ticktemp_0);
}
#endif
#if defined ( __C51__ ) || defined ( __C251__ )
mUserReg_SAVEc();
#endif
}
/* 新任务出栈-预处理 */
@@ -687,7 +700,9 @@ __IAR_WEAK s_u8_t sPendSV_Handler(void) MCUCFG_OSIT_ATTRIBUTE
usedtime[1] = ticktemp_0;
}
#endif
#if defined ( __C51__ ) || defined ( __C251__ )
mUserReg_RESc();
#endif
s_task_news = node_news;
}
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_main.c
* @brief 启动-CosyOS
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
+10 -13
View File
@@ -2,11 +2,11 @@
* @item CosyOS-III Kernel
* @file os_redef.h
* @brief 系统重定义
* @details 基于 os_def.h、os_base.h、syscfg.h、mcucfg_x.h、port_x.h 等文件
中的定义而再次定义,包括宏定义和类型定义。
* @details 基于 os_def.h、syscfg.h、mcucfg_x.h、port_x.h 等文件中的定义
而再次定义,包括宏定义和类型定义。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.24
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __OS_REDEF_H
@@ -23,7 +23,7 @@
/*------------------------------------------------------------------------------
* ZERO-INSTALL */
#if (MCUCFG_OSZEROINSTALL == __ENABLED__)
#if defined ( MCUCFG_OSZEROINSTALL ) && (MCUCFG_OSZEROINSTALL == __ENABLED__)
#define sZeroInstall = 0
#define sZeroInstall_Group = {0}
#else
@@ -180,11 +180,7 @@
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if (MCUCFG_ISA == __ARM__)
#define OS_TASKMGR_LEN_RAM 15
#else
#define OS_TASKMGR_LEN_RAM 13
#endif
#define OS_TASKMGR_LEN_RAM (11 + sizeof(int))
#define OS_TASKMGR_LEN_LINE \
( \
@@ -221,6 +217,7 @@ typedef s_u16_t s_sharing_t;
#endif
#endif
typedef s_u8_t s_ecode_t; /*!< 错误码类型 */
typedef sCat3Str(s_u, SYSCFG_DELAY_BITS, _t) s_delay_t; /*!< 延时定时器类型 */
typedef sCat3Str(s_u, SYSCFG_TIMINT_BITS, _t) s_timint_t; /*!< 定时中断定时器类型 */
typedef sCat3Str(s_u, SYSCFG_TIMQRY_BITS, _t) s_timqry_t; /*!< 定时查询定时器类型 */
@@ -533,7 +530,7 @@ typedef struct
{
s_taskctrl_tsp htask;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
bool volatile mutex;
bool volatile lock;
#endif
size_t volatile counter;
s_u8_t const type;
@@ -552,7 +549,7 @@ typedef struct
{
s_taskctrl_tsp htask;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
bool volatile mutex;
bool volatile lock;
#endif
size_t volatile counter;
s_u8_t const type;
@@ -573,7 +570,7 @@ typedef struct
{
s_taskctrl_tsp htask; /*!< 任务句柄 */
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
bool volatile mutex; /*!< 队列互斥量 */
bool volatile lock; /*!< 队列互斥锁 */
#endif
size_t volatile counter; /*!< 队列计数器:记录队列中消息的数量 */
s_u8_t const type; /*!< 队列类型 [0:静态队列,1:动态队列] */
+99
View File
@@ -0,0 +1,99 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_stack.c
* @brief main stack and task stack check
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_stack.h"
#if (SYSCFG_DEBUGGING == __ENABLED__)
#include <string.h>
#if defined ( __C51__ )
#define STACK_TYPE 1 // 满增栈
static s_u8_t const stack_data[ 8] = {"CosyOS51"};
#elif defined ( __C251__ )
#define STACK_TYPE 1 // 满增栈
static s_u8_t const stack_data[16] = {"CosyOS for 80251"};
#else
#define STACK_TYPE 2 // 满减栈
static s_u8_t const stack_data[32] = {"CosyOS is an RTOS come on China."};
#endif
/**
\brief 栈检查初始化
\param[in] addr 栈的初始安装指针
\param[in] size 栈的大小
\return 无
*/
void s_stack_check_init(STACK_ADDR_T addr, STACK_SIZE_T size)
{
STACK_SIZE_T i;
STACK_SIZE_T c = size / sizeof(stack_data);
#if ( STACK_TYPE == 1 )
STACK_ADDR_T p = addr + size - sizeof(stack_data);
#elif ( STACK_TYPE == 2 )
STACK_ADDR_T p = addr - size;
#endif
for(i = 0; i < c; i++){
memcpy(p, stack_data, sizeof(stack_data));
#if ( STACK_TYPE == 1 )
p -= sizeof(stack_data);
#elif ( STACK_TYPE == 2 )
p += sizeof(stack_data);
#endif
}
}
/**
\brief 栈检查
\param[in] addr 栈的初始安装指针
\param[in] size 栈的大小
\return 栈用量
*/
STACK_SIZE_T s_stack_check(STACK_ADDR_T addr, STACK_SIZE_T size)
{
STACK_SIZE_T i;
STACK_SIZE_T c = size / sizeof(stack_data);
#if ( STACK_TYPE == 1 )
STACK_ADDR_T p = addr + size - sizeof(stack_data);
#elif ( STACK_TYPE == 2 )
STACK_ADDR_T p = addr - size;
#endif
for(i = 0; i < c; i++){
if(!memcmp(p, stack_data, sizeof(stack_data))){
#if ( STACK_TYPE == 1 )
p -= sizeof(stack_data);
#elif ( STACK_TYPE == 2 )
p += sizeof(stack_data);
#endif
}
else{
break;
}
}
#if ( STACK_TYPE == 1 )
return (STACK_SIZE_T)(p - addr) + sizeof(stack_data);
#elif ( STACK_TYPE == 2 )
return (STACK_SIZE_T)(addr - p);
#endif
}
#endif
+33
View File
@@ -0,0 +1,33 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_stack.h
* @brief main stack and task stack check
* @author 迟凯峰
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __OS_STACK_H
#define __OS_STACK_H
#include "os_redef.h"
#if defined ( __C51__ )
typedef s_u8_t idata *STACK_ADDR_T;
typedef s_u8_t STACK_SIZE_T;
#elif defined ( __C251__ )
typedef s_u8_t edata *STACK_ADDR_T;
typedef s_u16_t STACK_SIZE_T;
#else
typedef s_u8_t *STACK_ADDR_T;
typedef s_u32_t STACK_SIZE_T;
#endif
void s_stack_check_init(STACK_ADDR_T addr, STACK_SIZE_T size);
STACK_SIZE_T s_stack_check (STACK_ADDR_T addr, STACK_SIZE_T size);
#endif
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_starter.c
* @brief 任务启动器(Starter)
* @author 迟凯峰
* @version V2.3.2
* @date 2026.03.08
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_sysidle.c
* @brief 系统空闲任务(Sysidle)
* @author 迟凯峰
* @version V2.3.9
* @date 2026.06.20
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
+34 -16
View File
@@ -3,8 +3,8 @@
* @file os_taskmgr.c
* @brief 任务管理器(Taskmgr)
* @author 迟凯峰
* @version V2.3.9
* @date 2026.06.20
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "CosyOS.H"
@@ -409,15 +409,33 @@ uCreateTask_TimQry
/* CPU总使用率 */
mptr = p[0];
_used_ratio_(numerator1);
/* Main Stack */
#if (MCUCFG_TASKSTACK_MODE & __MSP__)
mptr += OS_TASKMGR_LEN_RAM - _u16len_(m_stacklen_max) - _u16len_(m_stacksize) - 2;
_u16str_(m_stacklen_max);
_strcpy_(str);
_strcpy_("/");
_u16str_(m_stacksize);
_strcpy_(str);
_chrcpy_('B');
/* Stack Mode // Main Stack */
#if (MCUCFG_TASKSTACK_MODE == __PSP__)
mptr += OS_TASKMGR_LEN_RAM - 3;
_strcpy_("PSP");
#else
if(true){
static s_u8_t i = 15;
i = (i + 1) & 15;
if(i < 8){
#if (MCUCFG_TASKSTACK_MODE == __MSP__)
_spccpy_(OS_TASKMGR_LEN_RAM - 3);
_strcpy_("MSP");
#elif (MCUCFG_TASKSTACK_MODE == __MSP_PSP__)
_spccpy_(OS_TASKMGR_LEN_RAM - 7);
_strcpy_("MSP+PSP");
#endif
}
else{
mptr += OS_TASKMGR_LEN_RAM - _u16len_(m_stacklen_max) - _u16len_(m_stacksize) - 2;
_u16str_(m_stacklen_max);
_strcpy_(str);
_strcpy_("/");
_u16str_(m_stacksize);
_strcpy_(str);
_chrcpy_('B');
}
}
#endif
mptr = p0;
}
@@ -425,27 +443,27 @@ uCreateTask_TimQry
/* PSV-FIFO */
_strcpy_("PSV-FIFO: ");
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
if(mPendSV_FIFO_DepthMAX > MCUCFG_PENDSVFIFO_DEPTH){
if(mPendSV_FIFO_DepthMAX > SYSCFG_PENDSVFIFO_DEPTH){
s_fault.overflow_pendsvfifo = true;
}
_u16str_(mPendSV_FIFO_DepthMAX);
_strcpy_(str);
_strcpy_("/");
_u16str_(MCUCFG_PENDSVFIFO_DEPTH);
_u16str_(SYSCFG_PENDSVFIFO_DEPTH);
_strcpy_(str);
_strcpy_(",");
_u16str_(mPendSV_FIFO_CountMAX);
_strcpy_(str);
_strcpy_("/");
_u16str_(MCUCFG_PENDSVFIFO_COUNT);
_u16str_(SYSCFG_PENDSVFIFO_COUNT);
_strcpy_(str);
_spccpy_(
(s_u8_t)(
OS_TASKMGR_LEN_LINE - 20 - 10 - 3
- _u16len_((s_u16_t)mPendSV_FIFO_DepthMAX)
- _u16len_((s_u16_t)MCUCFG_PENDSVFIFO_DEPTH)
- _u16len_((s_u16_t)SYSCFG_PENDSVFIFO_DEPTH)
- _u16len_((s_u16_t)mPendSV_FIFO_CountMAX)
- _u16len_((s_u16_t)MCUCFG_PENDSVFIFO_COUNT)
- _u16len_((s_u16_t)SYSCFG_PENDSVFIFO_COUNT)
)
);
#else
+2 -2
View File
@@ -3,8 +3,8 @@
* @file os_timing.c
* @brief 初始化定时中断、定时查询
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
+3 -3
View File
@@ -3,8 +3,8 @@
* @file os_var.c
* @brief 系统全局变量定义
* @author 迟凯峰
* @version V2.3.8
* @date 2026.06.15
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_redef.h"
@@ -128,6 +128,6 @@ s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group;
#elif (SYSCFG_MUTEX == __ENABLED__)
s_u8_t _SYS_MEM_ s_taskpri_ceiling = SYSCFG_BASEPRI_CEILING; /*!< 天花板优先级 */
#endif
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
#if (SYSCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
s_ecode_t _SYS_MEM_ s_psvfifo_ecode; /*!< 中断挂起服务_FIFO-错误调用返回.错误码 */
#endif
+3 -3
View File
@@ -3,8 +3,8 @@
* @file os_var.h
* @brief 系统全局变量声明
* @author 迟凯峰
* @version V2.3.8
* @date 2026.06.15
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __OS_VAR_H
@@ -99,7 +99,7 @@ extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
#elif (SYSCFG_MUTEX == __ENABLED__)
extern s_u8_t _SYS_MEM_ s_taskpri_ceiling;
#endif
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
#if (SYSCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
extern s_ecode_t _SYS_MEM_ s_psvfifo_ecode;
#endif
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
+15 -8
View File
@@ -4,16 +4,17 @@
* @brief 内核公共服务
* @details 在服务层临界区中调用并执行。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.24
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_com.h"
#if (SYSCFG_MCUCORE == 8051)
#pragma NOAREGS /* 相对寄存器访问 for C51 */
/* 相对寄存器访问 for C51 */
#if defined ( __C51__ )
#pragma NOAREGS
#endif
/**
@@ -764,7 +765,9 @@ void sc_send_mail(s_mailbox_tsp hmbox, void *mail)
{
s_taskctrl_tsp htask = hmbox->htask;
hmbox->flag = false;
__mx_MMB();
hmbox->mail = mail;
__mx_MMB();
hmbox->flag = true;
if(htask != OS_NULL){
sa_block_to_ready(htask);
@@ -786,14 +789,16 @@ s_ecode_t sc_send_msg(s_msgque_tsp hque, void *msg)
{
s_taskctrl_tsp htask;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = false;
hque->lock = false;
__mx_MMB();
#endif
if(hque->counter == hque->len){
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_alarm.overflow_msgqueue = true;
#endif
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
return OS_ECODE_OVERFLOW_MSGQUEUE;
}
@@ -805,7 +810,8 @@ s_ecode_t sc_send_msg(s_msgque_tsp hque, void *msg)
s_fault.mallocfailed_msgnode = true;
#endif
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
return OS_ECODE_MALLOCFAIL_MSGNODE;
}
@@ -838,7 +844,8 @@ s_ecode_t sc_send_msg(s_msgque_tsp hque, void *msg)
htask->next_b = OS_NULL;
}
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
return OS_ECODE_NOERROR;
}
+2 -2
View File
@@ -4,8 +4,8 @@
* @brief 内核公共服务
* @details 在服务层临界区中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_COM_H
+2 -2
View File
@@ -4,8 +4,8 @@
* @brief 创建服务
* @details 用于创建 CosyOS 内核对象。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.27
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_CREATE_H
+3 -3
View File
@@ -4,12 +4,12 @@
* @brief 中断FIFO服务-执行函数
* @details 仅在 PendSV中断 中由系统调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
#if (SYSCFG_PENDSVFIFO_DEPTH > 0)
#include "os_api.h"
#include "sv_com.h"
#include "ur_api.h"
+4 -4
View File
@@ -4,8 +4,8 @@
* @brief 中断FIFO服务-调用宏
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_INT_FIFO_H
@@ -155,8 +155,8 @@ do{ \
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, _sign##sizeof(_group), 0}; \
u_##_group##_ts u_grp; \
miWriteFlagBits(); \
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARYMASK \
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARYMASK \
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp = false : false; \
siWriteFlagBits_##_nbit(
+17 -12
View File
@@ -4,15 +4,16 @@
* @brief 中断本地服务
* @details 在用户中断中调用并直接在本地执行。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.24
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
#include "sv_com.h"
#if (SYSCFG_MCUCORE == 8051)
#pragma NOAREGS /* 相对寄存器访问 for C51 */
/* 相对寄存器访问 for C51 */
#if defined ( __C51__ )
#pragma NOAREGS
#endif
/**
@@ -67,7 +68,7 @@ void *si_recv_mail(s_mailbox_tsp hmbox)
#endif
#if (SYSCFG_MSGQUEUE == __ENABLED__) && (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
/**
\brief 获取队列互斥量
\details 获取队列访问权限 for C51接收消息。
@@ -76,8 +77,9 @@ void *si_recv_mail(s_mailbox_tsp hmbox)
*/
bool si_take_quemut(s_msgque_tsp hque)
{
if(!hque->mutex) return false;
hque->mutex = false;
if(!hque->lock) return false;
hque->lock = false;
__mx_MMB();
if(hque->type == __DYNAMIC__){
#if (SYSCFG_DEBUGGING == __ENABLED__)
@@ -87,7 +89,8 @@ bool si_take_quemut(s_msgque_tsp hque)
else if(!hque->counter);
else return true;
hque->mutex = true;
__mx_MMB();
hque->lock = true;
return false;
}
@@ -112,7 +115,7 @@ static void *_back_ret_(bool _STATIC_MEM_ *mut, void *msg)
void *si_recv_msg_c51(s_msgque_tsp hque)
{
void *msg = sc_recv_msg_staque((s_staque_tsp)hque);
return _back_ret_((bool *)&hque->mutex, msg);
return _back_ret_((bool *)&hque->lock, msg);
}
#else
/**
@@ -123,8 +126,9 @@ void *si_recv_msg_c51(s_msgque_tsp hque)
void *si_recv_msg_n51(s_msgque_tsp hque)
{
void *msg = OS_NULL;
if(!hque->mutex) return OS_NULL;
hque->mutex = false;
if(!hque->lock) return OS_NULL;
hque->lock = false;
__mx_MMB();
if(hque->type == __DYNAMIC__){
#if (SYSCFG_DEBUGGING == __ENABLED__)
@@ -135,7 +139,8 @@ void *si_recv_msg_n51(s_msgque_tsp hque)
msg = sc_recv_msg_staque((s_staque_tsp)hque);
}
hque->mutex = true;
__mx_MMB();
hque->lock = true;
return msg;
}
#endif
+10 -3
View File
@@ -4,8 +4,8 @@
* @brief 中断本地服务
* @details 在用户中断中调用并直接在本地执行。
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.19
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_INT_LOC_H
@@ -32,12 +32,19 @@ m_fetion_t si_recv_fetion (s_tionbox_tsp htbox);
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
#define sISV_RecvMsg(que) (si_take_quemut((s_msgque_tsp)&que) ? si_recv_msg_c51((s_msgque_tsp)&que) : OS_NULL) /*!< C51接收消息 */
#else
#define sISV_RecvMsg(que) si_recv_msg_n51((s_msgque_tsp)&que) /*!< 非51接收消息 */
#endif
/** 归还二值信号量 */
#define sISV_BackBin(bin) \
do{ \
__mx_MMB(); \
bin.binary = true; \
}while(false)
/** 查询标志组 */
#define sISV_QueryFlagGroup(group) \
( \
+2 -2
View File
@@ -4,8 +4,8 @@
* @brief PSV服务
* @details 仅在 PendSV中断 中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_PEND_H
+27 -26
View File
@@ -4,8 +4,8 @@
* @brief 任务服务
* @details 仅在任务中调用并执行。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.24
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
@@ -29,6 +29,7 @@ void su_schedule_unlocks(void)
if(!s_sign_schedule.every[1]){
#endif
s_sign_schedule.every[0] = false;
__mx_MMB();
mPendSV_Set();
while(!s_sign_schedule.every[1]);
}
@@ -48,9 +49,7 @@ void su_kernel_unlocks(void)
if(!s_sign_schedule.total){
mPendSV_Set();
mSysIRQ_Enable();
#if (MCUCFG_ISA == __ARM__)
OS_NOP(1);
#endif
while(!s_sign_schedule.every[1]);
}
else{
@@ -64,17 +63,16 @@ void su_kernel_unlock0_psv(void)
s_sign_schedule.every[1] = false;
mPendSV_Set();
mSysIRQ_Enable();
#if (MCUCFG_ISA == __ARM__)
OS_NOP(1);
#endif
while(!s_sign_schedule.every[1]);
}
#if (MCUCFG_ISA != __ARM__)
#if defined ( __C51__ ) || defined ( __C251__ )
/** 调度上锁(进入嵌套任务临界区)*/
void su_schedule_locks(void)
{
s_sign_schedule.every[0] = true;
__mx_MMB();
s_schedulelock_counter++;
}
@@ -132,9 +130,7 @@ s_ecode_t su_startup_task_0(s_taskload_tsp hload, s_u8_t status)
s_sign_startup = false;
mPendSV_Set();
mSysIRQ_Enable();
#if (MCUCFG_ISA == __ARM__)
OS_NOP(1);
#endif
while(!s_sign_startup);
return s_task_starter._ecode;
}
@@ -249,7 +245,7 @@ bool su_take_mutex(s_mutex_tsp hmut, s_delay_t tick)
}
s_task_current->handle = hmut;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hmut = (s_mutex_tsp)s_task_current->handle;
#endif
if(!hmut->mutex) goto __RET_TRUE1;
@@ -324,7 +320,7 @@ bool su_wait_binary(s_binary_tsp hbin, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_BINARY;
s_task_current->handle = hbin;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hbin = (s_binary_tsp)s_task_current->handle;
#endif
if(hbin->binary) goto __RET_TRUE;
@@ -360,7 +356,7 @@ bool su_take_binary(s_binary_tsp hbin, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_BINARY;
s_task_current->handle = hbin;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hbin = (s_binary_tsp)s_task_current->handle;
#endif
if(hbin->binary) goto __RET_TRUE;
@@ -408,7 +404,7 @@ bool su_take_semaph(s_semaph_tsp hsem, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_SEMAPHORE;
s_task_current->handle = hsem;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hsem = (s_semaph_tsp)s_task_current->handle;
#endif
counter = hsem->counter;
@@ -453,11 +449,11 @@ bool su_recv_taskmsg(s_u8_t volatile _STATIC_MEM_ *tmrf, s_delay_t tick)
sa_remove_ready(s_task_current);
s_task_current->status = OS_STATUS_BLOCKED;
s_task_current->blocktype = OS_BLOCKED_TASKMSG;
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
s_task_current->handle = (void *)tmrf;
#endif
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
tmrf = (s_u8_t volatile _STATIC_MEM_ *)s_task_current->handle;
#endif
if(*tmrf) goto __RET_TRUE;
@@ -513,7 +509,7 @@ m_fetion_t su_recv_fetion(s_tionbox_tsp htbox, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_FETION;
s_task_current->handle = htbox;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
htbox = (s_tionbox_tsp)s_task_current->handle;
#endif
@@ -562,7 +558,7 @@ void *su_recv_mail(s_mailbox_tsp hmbox, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_MAIL;
s_task_current->handle = hmbox;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hmbox = (s_mailbox_tsp)s_task_current->handle;
#endif
if(hmbox->flag) goto __RET_MAIL;
@@ -595,14 +591,16 @@ void *su_recv_msg(s_msgque_tsp hque, s_delay_t tick)
{
void *msg;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = false;
hque->lock = false;
__mx_MMB();
#endif
if(hque->counter) goto __RECV_MSG;
if(!tick) goto __RET_NULL;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
if(~tick) sa_insert_timerlist(s_task_current, tick);
sa_insert_blocklist(&hque->htask);
@@ -611,11 +609,12 @@ void *su_recv_msg(s_msgque_tsp hque, s_delay_t tick)
s_task_current->blocktype = OS_BLOCKED_MSG;
s_task_current->handle = hque;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hque = (s_msgque_tsp)s_task_current->handle;
#endif
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = false;
hque->lock = false;
__mx_MMB();
#endif
if(!hque->counter) goto __RET_NULL;
@@ -627,13 +626,15 @@ __RECV_MSG:
msg = sc_recv_msg_staque((s_staque_tsp)hque);
}
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
return _unlock0_rvp_(msg);
__RET_NULL:
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
mSysIRQ_Enable();
return OS_NULL;
@@ -689,7 +690,7 @@ bool su_wait_group_1(s_u8_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick)
s_task_current->blocktype = 1;
s_task_current->handle = (void *)hgrp;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hgrp = (s_u8_t volatile _STATIC_MEM_ *)s_task_current->handle;
#endif
if(*hgrp) goto __RET_TRUE;
@@ -724,7 +725,7 @@ bool su_wait_group_2(s_u16_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick)
s_task_current->blocktype = 2;
s_task_current->handle = (void *)hgrp;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hgrp = (s_u16_t volatile _STATIC_MEM_ *)s_task_current->handle;
#endif
if(*hgrp) goto __RET_TRUE;
@@ -759,7 +760,7 @@ bool su_wait_group_4(s_u32_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick)
s_task_current->blocktype = 4;
s_task_current->handle = (void *)hgrp;
su_kernel_unlock0_psv();
#if (SYSCFG_MCUCORE == 8051)
#if defined ( __C51__ )
hgrp = (s_u32_t volatile _STATIC_MEM_ *)s_task_current->handle;
#endif
if(*hgrp) goto __RET_TRUE;
+8 -7
View File
@@ -4,8 +4,8 @@
* @brief 任务服务
* @details 仅在任务中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_TASK_H
@@ -13,7 +13,7 @@
#include "os_var.h"
#if (MCUCFG_ISA != __ARM__)
#if defined ( __C51__ ) || defined ( __C251__ )
void su_schedule_locks (void);
void su_kernel_lock0 (void);
void su_kernel_unlock0 (void);
@@ -23,7 +23,7 @@ void *su_kernel_unlocks_rvp(void *p);
#if (SYSCFG_KERNELLOCKNESTING == __DISABLED__)
#define su_kernel_locks su_kernel_lock0
#elif (MCUCFG_ISA != __ARM__)
#elif defined ( __C51__ ) || defined ( __C251__ )
void su_kernel_locks (void);
#endif
@@ -63,11 +63,12 @@ void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
@{
*/
#if (MCUCFG_ISA == __ARM__)
#if !defined ( __C51__ ) && !defined ( __C251__ )
/** 调度上锁(进入嵌套任务临界区)*/
__STATIC_FORCEINLINE void su_schedule_locks(void)
{
s_sign_schedule.every[0] = true;
__mx_MMB();
s_schedulelock_counter++;
}
@@ -343,8 +344,8 @@ do{ \
#define sUSV_ClearFlagGroup(group) \
do{ \
su_kernel_locks(); \
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARY_MASK \
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
su_kernel_unlocks(); \
}while(false)
+6 -4
View File
@@ -4,8 +4,8 @@
* @brief 滴答服务
* @details 仅在 SysTick中断 中调用并执行。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.24
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#include "os_var.h"
@@ -46,7 +46,8 @@ void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
{
void *msg = OS_NULL;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = false;
hque->lock = false;
__mx_MMB();
#endif
if(hque->counter){
@@ -59,7 +60,8 @@ void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
}
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->mutex = true;
__mx_MMB();
hque->lock = true;
#endif
return msg;
}
+11 -4
View File
@@ -4,8 +4,8 @@
* @brief 滴答服务
* @details 仅在 SysTick中断 中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __SV_TICK_H
@@ -51,6 +51,13 @@ void *st_recv_msg (s_msgque_tsp hque);
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
/** 归还二值信号量 */
#define sTSV_BackBin(bin) \
do{ \
__mx_MMB(); \
bin.binary = true; \
}while(false)
/** 发送私信 */
#define sTSV_SendTaskmsg(task) \
s_taskmsg_sign = 1; \
@@ -76,8 +83,8 @@ do{ \
/** 清除标志组 */
#define sTSV_ClearFlagGroup(group) \
do{ \
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARY_MASK \
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
}while(false)
+4 -4
View File
@@ -4,8 +4,8 @@
* @brief 用户API
* @details 用户API定义,含注释说明,所有内核服务的API说明均在此文件中,并支持doxygen。
* @author 迟凯峰
* @version V2.4.1
* @date 2026.06.28
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __UR_API_H
@@ -1840,7 +1840,7 @@ void start_hook(void)
\note 全局临界区会破坏零中断延迟,应做为最后的选项,慎重使用。
@{
*/
#if (MCUCFG_ISA != __ARM__)
#if defined ( __C51__ ) || defined ( __C251__ )
/**
\ingroup 全局临界区
\defgroup 操作-EA
@@ -2090,7 +2090,7 @@ do{ \
\warning 主栈大小的定义如有变动,此处参数应随之调整、切勿遗忘,否则易导致<br>
检查结果不准确或系统运行异常。
*/
#if (SYSCFG_MCUCORE == 8051) || defined ( __ICCARM__ )
#if defined ( __C51__ ) || defined ( __ICCARM__ )
#define uMainStack_CheckInit() mMainStack_CheckInit()
#else
#define uMainStack_CheckInit(size) mMainStack_CheckInit(size)
+4 -4
View File
@@ -5,8 +5,8 @@
* @details 用户API的补充扩展定义,仅是定义无注释说明,所有内核服务的API说明
均在 ur_api.h 中,并支持 doxygen。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
* @version v3.0.0
* @date 2026.07.21
******************************************************************************/
#ifndef __UR_EAPI_H
@@ -227,8 +227,8 @@
/* 归还二值信号量 */
//#define uBackBin(bin) uGiveBin(bin)
#define tBackBin(bin) bin.binary = true
#define iBackBin(bin) bin.binary = true
#define tBackBin(bin) sTSV_BackBin(bin)
#define iBackBin(bin) sISV_BackBin(bin)
/* 获取二值信号量 */
//#define uTakeBin(bin, tc) sUSV_TakeBin(bin, tc)