mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-10-06 04:59:34 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef2fc6cb79 | ||
|
|
acb96c32b2 | ||
|
|
29506b41f8 | ||
|
|
823c0504da | ||
|
|
ce9aa6ee42 | ||
|
|
f362b2f5c8 | ||
|
|
d7c272574c | ||
|
|
b32b500e79 | ||
|
|
0521c3b798 | ||
|
|
e125c054b2 | ||
|
|
c115addb21 | ||
|
|
7a62dd369e | ||
|
|
fedba4ebae | ||
|
|
eddae4d799 | ||
|
|
7b57c585fb | ||
|
|
cdb01f5051 | ||
|
|
fb84d3fdc6 | ||
|
|
a1176dd016 | ||
|
|
3f47ddec90 | ||
|
|
cba2e6427f | ||
|
|
0f4dbbbbea | ||
|
|
93d8934cee | ||
|
|
a969ce97b4 | ||
|
|
2c37e23d2a | ||
|
|
8f3ec078fd | ||
|
|
6a8cf16cf4 | ||
|
|
25aa16faea | ||
|
|
6d0177bb11 | ||
|
|
70f5a25d06 | ||
|
|
8d2a530c9f | ||
|
|
8acf2387a1 | ||
|
|
a3d1a5861d | ||
|
|
077d6d6880 | ||
|
|
63548e782a | ||
|
|
d4ace1f3c1 | ||
|
|
712ef52d6d | ||
|
|
4ace17c226 | ||
|
|
f02662cfb9 | ||
|
|
e641d7ba11 | ||
|
|
7c386c4476 | ||
|
|
cba9dec0e3 | ||
|
|
789c5acd42 | ||
|
|
6ba02e21e5 | ||
|
|
8689f53fd4 | ||
|
|
f2313dc3dd | ||
|
|
5dacbf4fc3 | ||
|
|
3d29f7010a | ||
|
|
6ec899d1e4 | ||
|
|
8e661b0257 | ||
|
|
15680c9e5e | ||
|
|
15595589b9 | ||
|
|
3c3ae8dfe3 | ||
|
|
1271175bee | ||
|
|
fc66c20d30 | ||
|
|
cd952dde9e | ||
|
|
8728047066 | ||
|
|
c2b6a66993 | ||
|
|
5fc2adf9c1 | ||
|
|
5779318e80 | ||
|
|
bda3cb6867 | ||
|
|
7a8bc055c9 | ||
|
|
e6366bf80e | ||
|
|
77c483585f | ||
|
|
253ed311cc | ||
|
|
172f26e179 | ||
|
|
412460be71 | ||
|
|
24e9a42ed8 | ||
|
|
0e245acb2d | ||
|
|
b6a2c23b23 | ||
|
|
2df0515430 | ||
|
|
aba1d92f60 | ||
|
|
ac71108d86 | ||
|
|
b892b79b88 | ||
|
|
0cead1d235 | ||
|
|
e4de4ea63c | ||
|
|
e42a91d123 | ||
|
|
ee45b70cc2 | ||
|
|
d2cbfc8113 | ||
|
|
c0fb890c0a | ||
|
|
9bc030333e | ||
|
|
2484777baf | ||
|
|
6a253f929b | ||
|
|
fea3280d30 | ||
|
|
b4393b9e63 | ||
|
|
32157c0ab5 | ||
|
|
165ab7f2a8 | ||
|
|
a89eb49c1d | ||
|
|
aae595934c | ||
|
|
14d6a42053 | ||
|
|
49ac343edd | ||
|
|
8c99f5ab85 | ||
|
|
aa43584895 | ||
|
|
ad70bce6f8 | ||
|
|
26309041b2 | ||
|
|
8ea5ba4a16 | ||
|
|
1cf7163098 | ||
|
|
eb167460ac | ||
|
|
8b2f9134bd | ||
|
|
af3f864127 | ||
|
|
e87b9e1d4f | ||
|
|
f3692627c0 | ||
|
|
125c18583b | ||
|
|
af1c855669 | ||
|
|
6c36aacc9a | ||
|
|
74322c01a1 | ||
|
|
0bcd3ee1ac | ||
|
|
a3aa004174 | ||
|
|
3abebd9302 | ||
|
|
6f836f2d28 | ||
|
|
a65f692e4e | ||
|
|
9157b668d6 | ||
|
|
a1c1b1556e | ||
|
|
023e2170e9 | ||
|
|
a572fefbdf | ||
|
|
ab2d315d67 | ||
|
|
5b430c536a | ||
|
|
f6bcfdd510 | ||
|
|
6e2babac87 | ||
|
|
2273e67a41 | ||
|
|
111a5567a5 | ||
|
|
5c904bc3ef | ||
|
|
cae92e8d18 | ||
|
|
85c9426106 | ||
|
|
c64f0734dd | ||
|
|
00fa307ac9 | ||
|
|
488d4cc183 | ||
|
|
1854ecd6d9 | ||
|
|
3ff5fa8be3 | ||
|
|
90d5c680f8 | ||
|
|
d60eb1fc8e | ||
|
|
202f8f6b06 | ||
|
|
dc839dfbae | ||
|
|
1c61cf6e8f | ||
|
|
b623c9d1b3 | ||
|
|
e92943a9a1 | ||
|
|
e7e16dd450 | ||
|
|
0165e3937c | ||
|
|
bc7a607edf | ||
|
|
685527f4a9 | ||
|
|
3c5580bec2 | ||
|
|
e401e1cc5b | ||
|
|
4a8b3d1d55 | ||
|
|
7a5f543e03 | ||
|
|
1857120de7 | ||
|
|
94cb6bdf21 | ||
|
|
c574c73f19 | ||
|
|
b74852f180 | ||
|
|
e98ebb3f84 | ||
|
|
dcf0aa9e6f | ||
|
|
1e0d58dbc5 | ||
|
|
166b322cf6 | ||
|
|
988d05e998 | ||
|
|
3c95ebf805 | ||
|
|
5009a604fe | ||
|
|
923ba5f62b | ||
|
|
93b0616119 | ||
|
|
cad9bc0d9c | ||
|
|
ac461b30bf | ||
|
|
d36f5c1030 | ||
|
|
a6f08069da | ||
|
|
c2845979a6 | ||
|
|
6dd19699b5 | ||
|
|
c003865a0a | ||
|
|
f2ebbf817a | ||
|
|
42bb5e04f9 | ||
|
|
d4de64db13 | ||
|
|
88560a02fe | ||
|
|
d37e145fb1 | ||
|
|
c3b90b0228 | ||
|
|
8560ffe59e | ||
|
|
64b84a6206 | ||
|
|
b864f726c6 | ||
|
|
bb6424230f | ||
|
|
da75712359 | ||
|
|
4dcf4077d3 | ||
|
|
aaaf741be9 | ||
|
|
bf91d5e9ac | ||
|
|
d24901bdc3 | ||
|
|
1c3a13daba | ||
|
|
3bfbbeeede | ||
|
|
0bbcede9b7 | ||
|
|
99aa6c495b | ||
|
|
448b9a23fa | ||
|
|
e6356e3ae3 | ||
|
|
f6fe832fbb | ||
|
|
f64328d47e | ||
|
|
9b049fd057 | ||
|
|
60bd1358d9 | ||
|
|
7d0dcfbbad | ||
|
|
6cb4d9194f | ||
|
|
8e4ce7b822 | ||
|
|
6c55138e73 | ||
|
|
16b550533f | ||
|
|
d9f3cb6f2f | ||
|
|
f98103b32c |
Binary file not shown.
@@ -225,3 +225,51 @@
|
||||
* DEBUG输出(包括任务管理器和命令行)扩展至 中英文双语。
|
||||
* 更新日期:2026.03.10
|
||||
|
||||
### V2.3.3
|
||||
* CosyOS-III Cube 新版发布,完美支持中文路径,无论是 CosyOS路径 还是 工程路径,都可随意用中文,不会有问题。<br>
|
||||
同时修复了路径识别上的bug,可应对各种复杂路径,确保成功安装。
|
||||
* 更新日期:2026.04.06
|
||||
|
||||
### V2.3.4
|
||||
* 优化了协作式调度和时间片轮转调度相关算法和细节。
|
||||
* uYieldTasking(),调整为:当开启相同优先级任务的协作式调度或时间片轮转调度时,才支持此项服务。
|
||||
* 更新日期:2026.04.16
|
||||
|
||||
### V2.3.5
|
||||
* 部分关键字重命名,包括数据类型、变量名称、宏定义等。
|
||||
* 调整了大部分 const、volatile 关键字的位置,由数据类型之前调整为之后。
|
||||
* syscfg.h 中增加了选项,可配置安全运行时计数器的位数。
|
||||
* 更新日期:2026.06.10
|
||||
|
||||
### V2.3.6
|
||||
* 有关任务启动的三个全局变量封装在一个结构体中。
|
||||
* 启动任务增加了新的安全策略,避免重复启动同一个任务。
|
||||
* 修复了一处有关任务调度的隐形bug。
|
||||
* 更新日期:2026.06.11
|
||||
|
||||
### V2.3.7
|
||||
* 修复了 port_cmx_s.c 中的一处遗漏重命名。
|
||||
* 进一步优化了启动任务,提高可靠性。
|
||||
* 增加了一项新的服务,重置任务。
|
||||
* 更新日期:2026.06.13
|
||||
|
||||
### V2.3.8
|
||||
* 超时链表由单向链表调整为双向链表。
|
||||
* 安全运行时,彻底解决其在特定情况下的不可靠因素。
|
||||
* 更新日期:2026.06.15
|
||||
|
||||
### V2.3.9
|
||||
* 增加了新的栈监控机制,使得对主栈和任务栈用量的检查更为准确,进一步提高了可靠性并降低了栈溢出的风险。
|
||||
* 更新日期:2026.06.20
|
||||
|
||||
### V2.4.0
|
||||
* 进一步优化了主栈检查,提升可靠性和易用性。
|
||||
* 修复了GCC编译器会产生警告的问题。
|
||||
* 更新日期:2026.06.22
|
||||
|
||||
### V2.4.1
|
||||
* 增加配置选项,是否需要在用户中断中接收消息?
|
||||
* 创建服务功能升级,互斥信号量、二值信号量、计数信号量、飞信、邮箱等,提供了创建不初始化服务,<br>
|
||||
该功能可用来创建相应的数组,或把它们封装在结构体中。
|
||||
* 更新日期:2026.06.28
|
||||
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
* @file demo_debug.c
|
||||
* @brief 例程-DEBUG for STC32G
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.1
|
||||
* @date 2025.10.20
|
||||
* @version V1.0.2
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */
|
||||
#if 1 /* 编译开关 */
|
||||
|
||||
#include "CosyOS.H"
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @file demo_main.c
|
||||
* @brief 例程-主函数 for STC32G
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.2
|
||||
* @date 2025.10.20
|
||||
* @version V1.0.3
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */
|
||||
@@ -14,6 +14,11 @@
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* 主栈检查初始化 */// 在main函数的入口处
|
||||
#if (SYSCFG_DEBUGGING == 1) && (MCUCFG_TASKSTACK_MODE & __MSP__)
|
||||
uMainStack_CheckInit(256); // 传参主栈大小,务必与启动文件中定义值相同。
|
||||
#endif
|
||||
|
||||
/* USER INIT CODE BEGIN */
|
||||
|
||||
/* USER INIT CODE END */
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
* @file demo_debug.c
|
||||
* @brief 例程-DEBUG for STC8H
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.1
|
||||
* @date 2025.10.20
|
||||
* @version V1.0.2
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */
|
||||
#if 1 /* 编译开关 */
|
||||
|
||||
#include "CosyOS.H"
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @file demo_main.c
|
||||
* @brief 例程-主函数 for STC8H
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.2
|
||||
* @date 2025.10.20
|
||||
* @version V1.0.3
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */
|
||||
@@ -14,6 +14,11 @@
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* 主栈检查初始化 */// 在main函数的入口处
|
||||
#if (SYSCFG_DEBUGGING == 1)
|
||||
uMainStack_CheckInit();
|
||||
#endif
|
||||
|
||||
/* USER INIT CODE BEGIN */
|
||||
|
||||
/* USER INIT CODE END */
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III 例程(系统构建)
|
||||
* @file demo_debug_fwl.c
|
||||
* @brief 例程-DEBUG for STM32F4 use Standard Peripheric Driver
|
||||
* @brief 例程-DEBUG for STM32 use Standard Peripheric Driver
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.1
|
||||
* @date 2026.02.19
|
||||
* @version V1.0.2
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */ \
|
||||
#if 1 /* 编译开关 */ \
|
||||
&& defined (USE_STDPERIPH_DRIVER)
|
||||
|
||||
#include "CosyOS.H"
|
||||
@@ -37,7 +37,15 @@
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if (__CORTEX_M == 0)
|
||||
#include "stm32f0xx_usart.h"
|
||||
#elif (__CORTEX_M == 3)
|
||||
#include "stm32f10x_usart.h"
|
||||
#elif (__CORTEX_M == 4)
|
||||
#include "stm32f4xx_usart.h"
|
||||
#elif (__CORTEX_M == 7)
|
||||
#include "stm32h7xx_usart.h"
|
||||
#endif
|
||||
static char u_debug_recv_buff[DEBUG_RECV_BUFF];
|
||||
static char *u_debug_recv_p = u_debug_recv_buff;
|
||||
#if (DEBUG_MODE == 0)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III 例程(系统构建)
|
||||
* @file demo_debug_hal.c
|
||||
* @brief 例程-DEBUG for STM32F4 use HAL Driver
|
||||
* @brief 例程-DEBUG for STM32 use HAL Driver
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.1
|
||||
* @date 2026.02.19
|
||||
* @version V1.0.2
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */ \
|
||||
#if 1 /* 编译开关 */ \
|
||||
&& defined (USE_HAL_DRIVER)
|
||||
|
||||
#include "CosyOS.H"
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @file demo_main.c
|
||||
* @brief 例程-主函数 for Cortex-M
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.2
|
||||
* @date 2026.02.19
|
||||
* @version V1.0.4
|
||||
* @date 2026.06.22
|
||||
******************************************************************************/
|
||||
|
||||
#if 0 /* 编译开关 */
|
||||
@@ -14,6 +14,15 @@
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* 主栈检查初始化 */// 在main函数的入口处
|
||||
#if (SYSCFG_DEBUGGING == 1)
|
||||
#if defined ( __ICCARM__ ) // IAR EWARM
|
||||
uMainStack_CheckInit();
|
||||
#else // AC5/AC6/GCC
|
||||
uMainStack_CheckInit(0x1000); // 传参主栈大小,务必与定义值相同。
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* USER INIT CODE BEGIN */
|
||||
// firmware library standard peripheric Driver
|
||||
#if defined (USE_STDPERIPH_DRIVER)
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* @details 通过私信的应用实现任务间通信。
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.1
|
||||
* @date 2026.02.04
|
||||
* @date 2026.04.16
|
||||
******************************************************************************/
|
||||
|
||||
#if 1 /* 编译开关 */
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
dExternTaskmsg(task_2)(unsigned int, void *, float); // 声明动态创建的私信任务 task_2
|
||||
|
||||
/* 静态创建私信任务 task_1 */ // 1个私信参数
|
||||
/* 静态创建私信任务 task_1 */// 1个私信参数
|
||||
uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
|
||||
{
|
||||
while(1){ // 已内置循环,此循环可省略
|
||||
@@ -35,7 +35,7 @@ uCreateTaskmsg(task_1, 1, 512, 0, "task_key", 1)(unsigned int tm1)
|
||||
uEndTaskmsg(); // 结束私信任务
|
||||
}
|
||||
|
||||
/* 动态创建私信任务 task_2 */ // 3个私信参数
|
||||
/* 动态创建私信任务 task_2 */// 3个私信参数
|
||||
dCreateTaskmsg(task_2, 2, 768, 0, "task_led", 3)(unsigned int tm1, void *tm2, float tm3)
|
||||
{
|
||||
// while(1){ // 已内置循环,此循环可省略
|
||||
|
||||
@@ -1,76 +0,0 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III 例程(服务应用)
|
||||
* @file coop_delay.c
|
||||
* @brief 协作_阻塞延时
|
||||
* @details 通过阻塞延时,实现任务的循环协作。
|
||||
* @note 适用于多个相同优先级任务的循环协作,依赖协作式调度算法。
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.0
|
||||
* @date 2025.10.21
|
||||
******************************************************************************/
|
||||
|
||||
/*-----------------------------------*
|
||||
| 服务 | 描述 |
|
||||
|-----------------+-----------------|
|
||||
| uDelay_xx(time) | 任务中 阻塞延时 |
|
||||
*-----------------------------------*/
|
||||
|
||||
/*
|
||||
注意事项:
|
||||
1、需开启相同优先级任务的协作式调度。
|
||||
2、延时时间最短为两个tick,不可更短。
|
||||
3、任务的启动顺序,决定了任务的协作运行顺序。
|
||||
*/
|
||||
|
||||
#if 1 /* 编译开关 */
|
||||
|
||||
#include "CosyOS.H"
|
||||
|
||||
/* task_1 */
|
||||
uCreateTask(task_1, 1, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
/* 协作处理事务 开始 */
|
||||
|
||||
/* 协作处理事务 结束 */
|
||||
/* 同步至task_2 开始 */
|
||||
uDelay_tc(2);
|
||||
/* 同步至task_2 结束 */
|
||||
}
|
||||
}
|
||||
|
||||
/* task_2 */
|
||||
uCreateTask(task_2, 1, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
/* 协作处理事务 开始 */
|
||||
|
||||
/* 协作处理事务 结束 */
|
||||
/* 同步至task_3 开始 */
|
||||
uDelay_tc(2);
|
||||
/* 同步至task_3 结束 */
|
||||
}
|
||||
}
|
||||
|
||||
/* task_3 */
|
||||
uCreateTask(task_3, 1, 384, 0, 0)
|
||||
{
|
||||
while(1){
|
||||
/* 协作处理事务 开始 */
|
||||
|
||||
/* 协作处理事务 结束 */
|
||||
/* 同步至task_1 开始 */
|
||||
uDelay_tc(2);
|
||||
/* 同步至task_1 结束 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 启动钩子 */
|
||||
void start_hook(void)
|
||||
{
|
||||
uStartTask_Ready(task_1); // 启动task_1,初始状态为就绪状态
|
||||
uStartTask_Ready(task_2); // 启动task_2,初始状态为就绪状态
|
||||
uStartTask_Ready(task_3); // 启动task_3,初始状态为就绪状态
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -3,10 +3,10 @@
|
||||
* @file coop_yield.c
|
||||
* @brief 协作_禅让任务
|
||||
* @details 通过禅让任务,实现任务的循环协作。
|
||||
* @note 适用于多个相同优先级任务的循环协作,依赖时间片轮转调度算法。
|
||||
* @note 适用于多个相同优先级任务的循环协作。
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.0
|
||||
* @date 2025.10.21
|
||||
* @version V1.0.1
|
||||
* @date 2026.04.16
|
||||
******************************************************************************/
|
||||
|
||||
/*--------------------------------*
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
/*
|
||||
注意事项:
|
||||
1、需开启相同优先级任务的时间片轮转调度。
|
||||
2、每个任务的运行时间,都必须小于时间片时间。
|
||||
1、需开启相同优先级任务的协作式调度或时间片轮转调度。
|
||||
2、如果是时间片轮转调度,每个任务的运行时间,都必须小于时间片时间。
|
||||
3、任务的启动顺序,决定了任务的协作运行顺序。
|
||||
*/
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @file mcucfg_80251.h
|
||||
* @brief 80251 Core Config File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __MCUCFG_80251_H
|
||||
@@ -191,8 +191,12 @@ do{ \
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define __MSP__ 0 // MSP模式
|
||||
#define __PSP__ 1 // PSP模式
|
||||
#ifndef __MSP__
|
||||
#define __MSP__ 1 // MSP模式
|
||||
#endif
|
||||
#ifndef __PSP__
|
||||
#define __PSP__ 2 // PSP模式
|
||||
#endif
|
||||
|
||||
#if (__MCUCFG_SYSCLK && __MCUCFG_SYSCLK <= 255)
|
||||
#define MCUCFG_SYSCLK (__MCUCFG_SYSCLK / 1UL)
|
||||
|
||||
+51
-6
@@ -3,23 +3,69 @@
|
||||
* @file port_80251.c
|
||||
* @brief 80251 Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#ifdef __PORT_80251_H
|
||||
|
||||
s_u16_t _SYS_MEM_ m_bsp_add = sizeof(s_taskhand_ts);
|
||||
s_u16_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
|
||||
static s_u8_t xdata mVOID _at_ 0;
|
||||
|
||||
|
||||
/*
|
||||
* 栈监控(涵盖主栈和任务栈)
|
||||
*/
|
||||
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#if (MCUCFG_TASKSTACK_MODE == __MSP__)
|
||||
s_u16_t m_msp;
|
||||
s_u16_t m_stacksize;
|
||||
s_u16_t m_stacklen_max/**/sZeroInstall;
|
||||
#endif
|
||||
s_u16_t data m_taskstacklen;
|
||||
static s_u8_t const stack_data[16] = {"CosyOS for 80251"};
|
||||
|
||||
void m_stack_check_init(s_u8_t edata *addr, s_u16_t size)
|
||||
{
|
||||
s_u16_t i;
|
||||
s_u16_t c = size / sizeof(stack_data);
|
||||
s_u8_t edata *p = addr + size - sizeof(stack_data);
|
||||
for(i = 0; i < c; i++){
|
||||
memcpy(p, stack_data, sizeof(stack_data));
|
||||
p -= sizeof(stack_data);
|
||||
}
|
||||
}
|
||||
|
||||
s_u16_t m_stack_check(s_u8_t edata *addr, s_u16_t size)
|
||||
{
|
||||
s_u16_t i;
|
||||
s_u16_t c = size / sizeof(stack_data);
|
||||
s_u8_t edata *p = addr + size - sizeof(stack_data);
|
||||
for(i = 0; i < c; i++){
|
||||
if(!memcmp(p, stack_data, sizeof(stack_data))){
|
||||
p -= sizeof(stack_data);
|
||||
}
|
||||
else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (s_u16_t)(p - addr) + sizeof(stack_data);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* 全局临界区
|
||||
*/
|
||||
|
||||
static bit m_oldirq;
|
||||
static volatile s_u8_t _SYS_MEM_ m_glocri_counter/**/sZeroInstall;
|
||||
static s_u8_t volatile _SYS_MEM_ m_glocri_counter/**/sZeroInstall;
|
||||
|
||||
void mx_disable_irq(void)
|
||||
{
|
||||
@@ -56,7 +102,7 @@ static void _STATIC_MEM_ *mPendSV_FIFO_0[MCUCFG_PENDSVFIFO_DEPTH] _at_ 0x0100;
|
||||
static void _STATIC_MEM_ *mPendSV_FIFO_1[MCUCFG_PENDSVFIFO_DEPTH] _at_ 0x0200;
|
||||
static void _fifo_x_(void _STATIC_MEM_ *sv)
|
||||
{
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t _STATIC_MEM_ *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const _STATIC_MEM_ *)sv])(sv);
|
||||
}
|
||||
|
||||
s_u8_t _SYS_MEM_ m_fifo_0_count = MCUCFG_PENDSVFIFO_DEPTH;
|
||||
@@ -273,5 +319,4 @@ __END:
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+63
-16
@@ -3,8 +3,8 @@
|
||||
* @file port_80251.h
|
||||
* @brief 80251 Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __PORT_80251_H
|
||||
@@ -122,8 +122,8 @@ extern void mPendSV_FIFOLoader (void _STATIC_MEM_ *sv);
|
||||
#define MCUCFG_BASICSTACKSIZE (42 + MCUCFG_USERREGSIZE)
|
||||
|
||||
|
||||
/* TaskNode */
|
||||
#define mTaskNode_Tail_ mUserReg_DEFc_
|
||||
/* TaskCtrl */
|
||||
#define mTaskCtrl_Tail_ mUserReg_DEFc_
|
||||
|
||||
|
||||
/* SysTick */
|
||||
@@ -200,13 +200,15 @@ do{ \
|
||||
do{}while(false)
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
/* 任务栈 */
|
||||
#define mTaskStack_INIT0() \
|
||||
#define mTaskStack_Reset0() \
|
||||
do{ \
|
||||
*(s_u32_t *)node_news->bsp = ( \
|
||||
((s_u16_t)s_task_starter->entry << 8) \
|
||||
| ((s_u16_t)s_task_starter->entry >> 8) \
|
||||
| ((s_u32_t)s_task_starter->entry & 0xFFFF0000) \
|
||||
((s_u16_t)node_news->entry << 8) \
|
||||
| ((s_u16_t)node_news->entry >> 8) \
|
||||
| ((s_u32_t)node_news->entry & 0xFFFF0000) \
|
||||
); \
|
||||
*(s_u8_t *)(node_news->bsp + 42 - 5) = DPXL; \
|
||||
*(s_u8_t *)(node_news->bsp + 42 - 1) = 0; \
|
||||
@@ -214,29 +216,74 @@ do{ \
|
||||
mUserReg_INITc(); \
|
||||
}while(false)
|
||||
|
||||
#define mTaskStack_LEN()
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
extern s_u16_t data m_taskstacklen;
|
||||
void m_stack_check_init(s_u8_t edata *addr, s_u16_t size);
|
||||
s_u16_t m_stack_check (s_u8_t edata *addr, s_u16_t size);
|
||||
#endif
|
||||
|
||||
/* MSP模式 */
|
||||
#if (MCUCFG_TASKSTACK_MODE == __MSP__)
|
||||
|
||||
/* 任务栈 */
|
||||
#define MCUCFG_TASKSTACK_REALLOC __ENABLED__
|
||||
#define mTaskNode_Head_ m_stacksize_t stacklen;
|
||||
#define mTaskStack_INIT() \
|
||||
#define mTaskCtrl_Head_ m_stacksize_t stacklen;
|
||||
|
||||
#define mTaskStack_Reset() \
|
||||
do{ \
|
||||
mTaskStack_INIT0(); \
|
||||
mTaskStack_Reset0(); \
|
||||
node_news->stacklen = MCUCFG_BASICSTACKSIZE; \
|
||||
}while(false)
|
||||
|
||||
#define mTaskStack_Init() \
|
||||
do{ \
|
||||
mTaskStack_Reset(); \
|
||||
}while(false)
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
extern s_u16_t m_msp;
|
||||
extern s_u16_t m_stacksize;
|
||||
extern s_u16_t m_stacklen_max;
|
||||
#define mMainStack_Check() m_stack_check((s_u8_t edata *)m_msp, m_stacksize)
|
||||
#define mTaskStack_Check0() m_taskstacklen
|
||||
|
||||
#define mMainStack_CheckInit(size) \
|
||||
do{ \
|
||||
m_msp = (SPH << 8) | SP; \
|
||||
m_stacksize = size; \
|
||||
m_stack_check_init((s_u8_t edata *)(m_msp + 16), size - 16); \
|
||||
}while(false)
|
||||
#endif
|
||||
|
||||
/* PSP模式 */
|
||||
#elif (MCUCFG_TASKSTACK_MODE == __PSP__)
|
||||
|
||||
/* 任务栈 */
|
||||
#define MCUCFG_TASKSTACK_REALLOC __DISABLED__
|
||||
#define mTaskNode_Head_ m_sp_t psp;
|
||||
#define mTaskStack_INIT() \
|
||||
#define mTaskCtrl_Head_ m_sp_t psp;
|
||||
|
||||
#define mTaskStack_Reset() \
|
||||
do{ \
|
||||
mTaskStack_INIT0(); \
|
||||
mTaskStack_Reset0(); \
|
||||
node_news->psp = (m_sp_t)node_news->bsp + MCUCFG_BASICSTACKSIZE - 1; \
|
||||
}while(false)
|
||||
|
||||
#define mTaskStack_Init() \
|
||||
do{ \
|
||||
mTaskStack_CheckInit(); \
|
||||
mTaskStack_Reset(); \
|
||||
}while(false)
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
#define mTaskStack_Check0() m_taskstacklen
|
||||
#define mTaskStack_Check() m_stack_check(s_task_current->bsp, s_task_current->stacksize)
|
||||
#define mTaskStack_CheckInit() m_stack_check_init(node_news->bsp + MCUCFG_BASICSTACKSIZE, node_news->stacksize - MCUCFG_BASICSTACKSIZE)
|
||||
#else
|
||||
#define mTaskStack_CheckInit()
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
;* @file port_80251s.s
|
||||
;* @brief 80251 Core Port File
|
||||
;* @author 迟凯峰
|
||||
;* @version V2.2.0
|
||||
;* @date 2026.01.13
|
||||
;* @version V2.3.9
|
||||
;* @date 2026.06.20
|
||||
;*******************************************************************************
|
||||
;
|
||||
$INCLUDE (syscfg.h)
|
||||
@@ -63,7 +63,7 @@ PSW1 DATA 0D1H
|
||||
EXTRN DATA (m_bsp_add)
|
||||
IF SYSCFG_DEBUGGING == 1
|
||||
EXTRN BIT (s_taskmgr_sign)
|
||||
EXTRN DATA (s_taskstacklen)
|
||||
EXTRN DATA (m_taskstacklen)
|
||||
ENDIF
|
||||
IF SYSCFG_TASKPC_MONITOR == 1
|
||||
EXTRN DATA (s_pc)
|
||||
@@ -104,7 +104,7 @@ IF SYSCFG_DEBUGGING == 1
|
||||
IF MCUCFG_USERREGSIZE
|
||||
ADD WR10, #MCUCFG_USERREGSIZE
|
||||
ENDIF
|
||||
MOV s_taskstacklen, WR10
|
||||
MOV m_taskstacklen, WR10
|
||||
ENDIF
|
||||
PRCall sPendSV_Handler{Prefix}
|
||||
|
||||
|
||||
+50
-9
@@ -3,16 +3,56 @@
|
||||
* @file port_8051.c
|
||||
* @brief 8051 Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#ifdef __PORT_8051_H
|
||||
|
||||
s_u8_t _SYS_MEM_ m_bsp_add = sizeof(s_taskhand_ts);
|
||||
#if (MCUCFG_PENDSVFIFO_DEPTH <= 0)
|
||||
static s_u8_t xdata mVOID _at_ 0;
|
||||
s_u8_t _SYS_MEM_ m_bsp_add = sizeof(s_taskload_ts);
|
||||
|
||||
|
||||
/*
|
||||
* 栈监控(涵盖主栈和任务栈)
|
||||
*/
|
||||
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
#include <string.h>
|
||||
s_u8_t m_msp;
|
||||
s_u8_t m_stacksize;
|
||||
s_u8_t m_stacklen_max/**/sZeroInstall;
|
||||
s_u8_t data m_taskstacklen;
|
||||
static s_u8_t const stack_data[8] = {"CosyOS51"};
|
||||
|
||||
void m_stack_check_init(s_u8_t idata *addr, s_u8_t size)
|
||||
{
|
||||
s_u8_t i;
|
||||
s_u8_t c = size / sizeof(stack_data);
|
||||
s_u8_t idata *p = addr + size - sizeof(stack_data);
|
||||
for(i = 0; i < c; i++){
|
||||
memcpy(p, stack_data, sizeof(stack_data));
|
||||
p -= sizeof(stack_data);
|
||||
}
|
||||
}
|
||||
|
||||
s_u8_t m_stack_check(s_u8_t idata *addr, s_u8_t size)
|
||||
{
|
||||
s_u8_t i;
|
||||
s_u8_t c = size / sizeof(stack_data);
|
||||
s_u8_t idata *p = addr + size - sizeof(stack_data);
|
||||
for(i = 0; i < c; i++){
|
||||
if(!memcmp(p, stack_data, sizeof(stack_data))){
|
||||
p -= sizeof(stack_data);
|
||||
}
|
||||
else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (s_u8_t)(p - addr) + sizeof(stack_data);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -21,7 +61,7 @@ static s_u8_t xdata mVOID _at_ 0;
|
||||
*/
|
||||
|
||||
static bit m_oldirq;
|
||||
static volatile s_u8_t _SYS_MEM_ m_glocri_counter/**/sZeroInstall;
|
||||
static s_u8_t volatile _SYS_MEM_ m_glocri_counter/**/sZeroInstall;
|
||||
|
||||
void mx_disable_irq(void)
|
||||
{
|
||||
@@ -47,8 +87,10 @@ void mx_resume_irq(void)
|
||||
* 中断FIFO服务
|
||||
*/
|
||||
|
||||
#if (MCUCFG_PENDSVFIFO_DEPTH > 0)
|
||||
#if (MCUCFG_PENDSVFIFO_DEPTH <= 0)
|
||||
static s_u8_t xdata mVOID _at_ 0;
|
||||
|
||||
#else
|
||||
#if (SYSCFG_PENDSVFIFO_MONITOR == __ENABLED__)
|
||||
s_u8_t mPendSV_FIFO_DepthMAX/**/sZeroInstall;
|
||||
s_u16_t mPendSV_FIFO_CountMAX/**/sZeroInstall;
|
||||
@@ -58,7 +100,7 @@ static s_u16_t mPendSV_FIFO_0[MCUCFG_PENDSVFIFO_DEPTH] _at_ 0x0000;
|
||||
static s_u16_t mPendSV_FIFO_1[MCUCFG_PENDSVFIFO_DEPTH] _at_ 0x0100;
|
||||
static void _fifo_x_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t _STATIC_MEM_ *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const _STATIC_MEM_ *)sv])(sv);
|
||||
}
|
||||
|
||||
s_u8_t _SYS_MEM_ m_fifo_0_count = MCUCFG_PENDSVFIFO_DEPTH;
|
||||
@@ -275,5 +317,4 @@ __END:
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+39
-10
@@ -3,8 +3,8 @@
|
||||
* @file port_8051.h
|
||||
* @brief 8051 Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __PORT_8051_H
|
||||
@@ -119,9 +119,9 @@ extern void mPendSV_FIFOHandler(void);
|
||||
#define MCUCFG_BASICSTACKSIZE (15 + MCUCFG_USERREGSIZE + (MCUCFG_XBPSTACK == __ENABLED__ ? 2 : 0))
|
||||
|
||||
|
||||
/* TaskNode */
|
||||
#define mTaskNode_Head_ m_stacksize_t stacklen;
|
||||
#define mTaskNode_Tail_ mUserReg_DEFc_
|
||||
/* TaskCtrl */
|
||||
#define mTaskCtrl_Head_ m_stacksize_t stacklen;
|
||||
#define mTaskCtrl_Tail_ mUserReg_DEFc_
|
||||
|
||||
|
||||
/* SysTick */
|
||||
@@ -199,7 +199,7 @@ do{ \
|
||||
u_f = true
|
||||
|
||||
|
||||
/* 任务栈 */
|
||||
/* XBPSTACK */
|
||||
#if (MCUCFG_XBPSTACK == __ENABLED__)
|
||||
#define mXBP_INIT() \
|
||||
*(s_u16_t *)(node_news->bsp + 15 + MCUCFG_USERREGSIZE) \
|
||||
@@ -208,15 +208,19 @@ do{ \
|
||||
#define mXBP_INIT()
|
||||
#endif
|
||||
|
||||
#define mTaskStack_INIT() \
|
||||
|
||||
/* 任务栈 */
|
||||
#define MCUCFG_TASKSTACK_MODE __MSP__
|
||||
|
||||
#define mTaskStack_Reset() \
|
||||
do{ \
|
||||
node_news->stacklen = ( \
|
||||
(MCUCFG_TASK_REGBANK == MCUCFG_OSIT_REGBANK ? 15 : 7) \
|
||||
+ (MCUCFG_USERREGCONFIG == 1 ? MCUCFG_USERREGSIZE : 0) \
|
||||
); \
|
||||
*(s_u16_t *)node_news->bsp = ( \
|
||||
((s_u16_t)s_task_starter->entry << 8) \
|
||||
| ((s_u16_t)s_task_starter->entry >> 8) \
|
||||
((s_u16_t)node_news->entry << 8) \
|
||||
| ((s_u16_t)node_news->entry >> 8) \
|
||||
); \
|
||||
*(s_u8_t *)(node_news->bsp + 7 - 1) = MCUCFG_TASK_REGBANK * 8; \
|
||||
mUserReg_INITa(); \
|
||||
@@ -224,7 +228,32 @@ do{ \
|
||||
mUserReg_INITc(); \
|
||||
}while(false)
|
||||
|
||||
#define mTaskStack_LEN()
|
||||
#define mTaskStack_Init() \
|
||||
do{ \
|
||||
mTaskStack_Reset(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
extern s_u8_t m_msp;
|
||||
extern s_u8_t m_stacksize;
|
||||
extern s_u8_t m_stacklen_max;
|
||||
extern s_u8_t data m_taskstacklen;
|
||||
void m_stack_check_init(s_u8_t idata *addr, s_u8_t size);
|
||||
s_u8_t m_stack_check (s_u8_t idata *addr, s_u8_t size);
|
||||
|
||||
#define mMainStack_CheckInit() \
|
||||
do{ \
|
||||
m_msp = SP; \
|
||||
m_stacksize = 0xFF - SP; \
|
||||
m_stack_check_init((s_u8_t idata *)(m_msp + 8), m_stacksize - 8); \
|
||||
}while(false)
|
||||
|
||||
#define mMainStack_Check() m_stack_check((s_u8_t idata *)m_msp, m_stacksize)
|
||||
#define mTaskStack_Check0() m_taskstacklen
|
||||
#endif
|
||||
|
||||
|
||||
/* 全局临界区 */
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
;* @file port_8051s.s
|
||||
;* @brief 8051 Core Port File
|
||||
;* @author 迟凯峰
|
||||
;* @version V2.2.0
|
||||
;* @date 2026.01.13
|
||||
;* @version V2.3.9
|
||||
;* @date 2026.06.20
|
||||
;*******************************************************************************
|
||||
;
|
||||
$NOMOD51
|
||||
@@ -45,7 +45,7 @@ $INCLUDE (mcucfg_8051.inc)
|
||||
EXTRN DATA (m_bsp_add)
|
||||
IF SYSCFG_DEBUGGING == 1
|
||||
EXTRN BIT (s_taskmgr_sign)
|
||||
EXTRN DATA (s_taskstacklen)
|
||||
EXTRN DATA (m_taskstacklen)
|
||||
ENDIF
|
||||
IF SYSCFG_TASKPC_MONITOR == 1
|
||||
EXTRN DATA (s_pc)
|
||||
@@ -76,7 +76,7 @@ ELSE
|
||||
PUSH AR7
|
||||
ENDIF
|
||||
mPendSV_Clear
|
||||
; s_taskstacklen
|
||||
; m_taskstacklen
|
||||
IF SYSCFG_DEBUGGING == 1
|
||||
CLR C
|
||||
MOV A, SP
|
||||
@@ -94,7 +94,7 @@ IF SYSCFG_DEBUGGING == 1
|
||||
ADD A, #MCUCFG_USERREGSIZE
|
||||
ENDIF
|
||||
ENDIF
|
||||
MOV s_taskstacklen, A
|
||||
MOV m_taskstacklen, A
|
||||
ENDIF
|
||||
LCALL sPendSV_Handler
|
||||
|
||||
|
||||
@@ -3,14 +3,56 @@
|
||||
* @file port_cmx.c
|
||||
* @brief CMSIS Cortex-M Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @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服务
|
||||
*/
|
||||
@@ -23,13 +65,13 @@ 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 */
|
||||
volatile bool m_sign_fifo = true; /*!< FIFO互斥访问锁:入FIFO与出FIFO的互斥
|
||||
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) /*!< 互斥访问机制二 */
|
||||
volatile bool m0_sign_mutex = false; /*!< FIFO计数器访问 */
|
||||
bool volatile m0_sign_mutex = false; /*!< FIFO计数器访问 */
|
||||
s_u8_t M0_IRQn_Pri[48]; /*!< 中断优先级表 */
|
||||
#endif
|
||||
|
||||
@@ -66,11 +108,11 @@ void mPendSV_FIFOHandler(void)
|
||||
do{
|
||||
sv = *++p;
|
||||
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||
#else
|
||||
if(sv != OS_NULL){
|
||||
*p = OS_NULL;
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||
}
|
||||
#endif
|
||||
}while(--i);
|
||||
@@ -102,11 +144,11 @@ void mPendSV_FIFOHandler(void)
|
||||
do{
|
||||
sv = *++p;
|
||||
#if (MCUCFG_PENDSVFIFO_MUTEX <= 1)
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||
#else
|
||||
if(sv != OS_NULL){
|
||||
*p = OS_NULL;
|
||||
(*sPendSV_FIFOHandler[*(const s_u8_t *)sv])(sv);
|
||||
(*sPendSV_FIFOHandler[*(s_u8_t const *)sv])(sv);
|
||||
}
|
||||
#endif
|
||||
}while(--i);
|
||||
@@ -121,5 +163,4 @@ void mPendSV_FIFOHandler(void)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
+52
-11
@@ -3,8 +3,8 @@
|
||||
* @file port_cmx.h
|
||||
* @brief CMSIS Cortex-M Core Port File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.4.0
|
||||
* @date 2026.06.22
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __PORT_CMX_H
|
||||
@@ -60,7 +60,7 @@ extern s_u32_t mPendSV_FIFO_DepthMAX;
|
||||
extern s_u16_t mPendSV_FIFO_CountMAX;
|
||||
extern void *mPendSV_FIFO_0[MCUCFG_PENDSVFIFO_DEPTH + 1];
|
||||
extern void *mPendSV_FIFO_1[MCUCFG_PENDSVFIFO_DEPTH + 1];
|
||||
extern volatile bool m_sign_fifo;
|
||||
extern bool volatile m_sign_fifo;
|
||||
extern void mPendSV_FIFOLoader (void *sv);
|
||||
extern void mPendSV_FIFOHandler(void);
|
||||
|
||||
@@ -104,7 +104,7 @@ __extension__ register void **mPendSV_FIFO_REGx __ASM(sDefStr(mPendSV_FIFO_rx));
|
||||
#endif
|
||||
|
||||
#if (MCUCFG_PENDSVFIFO_MUTEX == 3)
|
||||
extern volatile bool m0_sign_mutex;
|
||||
extern bool volatile m0_sign_mutex;
|
||||
extern s_u8_t M0_IRQn_Pri[48];
|
||||
#define mPriTable_INIT() \
|
||||
do{ \
|
||||
@@ -144,9 +144,9 @@ do{ \
|
||||
#define MCUCFG_BASICSTACKSIZE (MCUCFG_CALLER_PUSH + MCUCFG_CALLEE_PUSH)
|
||||
|
||||
|
||||
/* TaskNode */
|
||||
#define mTaskNode_Head_ m_sp_t psp;
|
||||
#define mTaskNode_Tail_ m_sp_t psp_top;
|
||||
/* TaskCtrl */
|
||||
#define mTaskCtrl_Head_ m_sp_t psp;
|
||||
#define mTaskCtrl_Tail_ m_sp_t psp_top;
|
||||
|
||||
|
||||
/*
|
||||
@@ -359,10 +359,9 @@ do{ \
|
||||
|
||||
|
||||
/* 任务栈 */
|
||||
#define mTaskStack_LEN() \
|
||||
s_taskstacklen = s_task_current->psp_top - __get_PSP() + MCUCFG_CALLEE_PUSH
|
||||
#define MCUCFG_TASKSTACK_MODE __MSP_PSP__
|
||||
|
||||
#define mTaskStack_INIT() \
|
||||
#define mTaskStack_Init() \
|
||||
do{ \
|
||||
node_news->psp_top = (m_sp_t)node_news->bsp + node_news->stacksize; \
|
||||
if(node_news->psp_top % 8){ \
|
||||
@@ -370,13 +369,55 @@ do{ \
|
||||
node_news->psp_top *= 8; \
|
||||
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; \
|
||||
mFPSCR_INIT(); /* FPSCR */ \
|
||||
*(volatile s_u32_t *)(node_news->psp - MCUCFG_CALLER_PUSH_FPU - 4) = 0x01000000; /* xPSR */ \
|
||||
*(volatile s_u32_t *)(node_news->psp - MCUCFG_CALLER_PUSH_FPU - 8) = (s_u32_t)s_task_starter->entry; /* r15(pc) */ \
|
||||
*(volatile s_u32_t *)(node_news->psp - MCUCFG_CALLER_PUSH_FPU - 8) = (s_u32_t)node_news->entry; /* r15(pc) */ \
|
||||
node_news->psp -= MCUCFG_BASICSTACKSIZE; \
|
||||
}while(false)
|
||||
|
||||
/* 栈监控 */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
|
||||
extern s_u32_t m_msp;
|
||||
extern s_u32_t m_stacksize;
|
||||
extern s_u32_t m_stacklen_max;
|
||||
void m_stack_check_init(s_u8_t *addr, s_u32_t size);
|
||||
s_u32_t m_stack_check (s_u8_t *addr, s_u32_t size);
|
||||
|
||||
#if defined ( __ICCARM__ )
|
||||
#define mMainStack_CheckInit() \
|
||||
do{ \
|
||||
extern uint32_t CSTACK$$Base; \
|
||||
extern uint32_t CSTACK$$Limit; \
|
||||
m_msp = (uint32_t)&CSTACK$$Limit; \
|
||||
m_stacksize = (uint32_t)&CSTACK$$Limit - (uint32_t)&CSTACK$$Base; \
|
||||
m_stack_check_init((s_u8_t *)(m_msp - 64), m_stacksize - 64); \
|
||||
}while(false)
|
||||
#else
|
||||
#define mMainStack_CheckInit(size) \
|
||||
do{ \
|
||||
m_msp = __get_MSP(); \
|
||||
m_stacksize = size; \
|
||||
m_stack_check_init((s_u8_t *)(m_msp - 64), size - 64); \
|
||||
}while(false)
|
||||
#endif
|
||||
|
||||
#define mTaskStack_Check0() s_task_current->psp_top - __get_PSP() + MCUCFG_CALLEE_PUSH
|
||||
#define mMainStack_Check() m_stack_check((s_u8_t *)m_msp, m_stacksize)
|
||||
#define mTaskStack_Check() m_stack_check((s_u8_t *)(s_task_current->psp_top), s_task_current->stacksize)
|
||||
#define mTaskStack_CheckInit() m_stack_check_init((s_u8_t *)(node_news->psp_top), node_news->stacksize)
|
||||
|
||||
#else
|
||||
#define mTaskStack_CheckInit()
|
||||
#endif
|
||||
|
||||
|
||||
/* 全局临界区 */
|
||||
__STATIC_INLINE s_u32_t __mx_disable_irq(void)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
* @file port_cmx_s.c
|
||||
* @brief CMSIS Cortex-M Core Port File for Arm / GNU / IAR Compiler
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -280,7 +280,7 @@ __OVER bx lr
|
||||
|
||||
#if !defined (__ICCARM__)
|
||||
s_u8_t sPendSV_Handler(void);
|
||||
extern s_tasknode_tsp s_task_news;
|
||||
extern s_taskctrl_tsp s_task_news;
|
||||
#else
|
||||
#include "os_handler.c"
|
||||
#endif
|
||||
|
||||
+23
-12
@@ -3,8 +3,8 @@
|
||||
* @file syscfg.h
|
||||
* @brief OS Config File
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.2
|
||||
* @date 2026.03.14
|
||||
* @version V2.4.1
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SYSCFG_H
|
||||
@@ -40,11 +40,17 @@
|
||||
// <i> 通常您可能不会用到内核锁,即使偶尔使用也应是极简的代码、一般不会嵌套调用。
|
||||
#define SYSCFG_KERNELLOCKNESTING 0
|
||||
|
||||
// <q> 安全运行时
|
||||
// <e> 安全运行时
|
||||
// <i> 是否启用安全运行时?
|
||||
// <i> 安全运行时是CosyOS的安全关键技术之一,可防止某任务长期独占或超时使用处理器。
|
||||
#define SYSCFG_SAFERUNTIME 0
|
||||
|
||||
// <o> 安全运行时计数器位数
|
||||
// <8=> 8位 <16=> 16位 <32=> 32位
|
||||
// <i> 如果MCU内核为8051,此项建议尽量配置为低位,以提高性能。
|
||||
#define SYSCFG_SRTIME_BITS 32
|
||||
// </e>
|
||||
|
||||
// <q> 低功耗模式
|
||||
// <i> 是否启用低功耗模式?
|
||||
// <i> 如果开启该选项,CosyOS会在系统空闲任务中进入低功耗模式。
|
||||
@@ -205,10 +211,9 @@
|
||||
// <i> 对于 CosyOS 来说,不同优先级的任务,永远都实行抢占式调度;
|
||||
// <i> 而相同优先级的任务,则分为无调度、协作式调度、时间片轮转调度。
|
||||
// <i> 无调度,是指不支持相同优先级的任务调度,每个任务的优先级都必须不同。
|
||||
// <i> 协作式调度,要求任务必须主动放弃处理器使用权(阻塞或挂起等方式),才能切换至下一个相同优先级的任务运行。
|
||||
// <i> 协作式调度,在性能上会高于时间片轮转调度,而且更节约内存。
|
||||
// <i> 协作式调度,用户不能创建自己的空闲任务。
|
||||
// <i> 在未经深思熟虑时,可优先选择时间片轮转调度,以保证相同优先级任务的平等运行机会。
|
||||
// <i> 时间片轮转调度,是指相同优先级的各个任务,享有相同的运行时间(时间片),轮流运行。
|
||||
// <i> 协作式调度,要求任务必须主动禅让处理器使用权,才能切换至下一个相同优先级的任务运行。
|
||||
// <i> 在未经深思熟虑时,应优先选择时间片轮转调度,以保证相同优先级任务的平等运行机会。
|
||||
#define SYSCFG_SAMEPRISCHEDULE 2
|
||||
|
||||
// <h> 时间片模式
|
||||
@@ -265,7 +270,7 @@
|
||||
// <o> 任务定时器位数
|
||||
// <8=> 8位 <16=> 16位 <32=> 32位
|
||||
// <i> 如果MCU内核为8051,此项建议尽量配置为低位(8位/16位),这将使大部分任务服务的执行效率提升约10%。
|
||||
#define SYSCFG_DELAYBITS 32
|
||||
#define SYSCFG_DELAY_BITS 32
|
||||
|
||||
// </h>
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -295,12 +300,12 @@
|
||||
// <o> 定时中断定时器位数
|
||||
// <8=> 8位 <16=> 16位 <32=> 32位
|
||||
// <i> 如果MCU内核为8051,此项建议尽量配置为低位,以提高性能。
|
||||
#define SYSCFG_TIMINTBITS 32
|
||||
#define SYSCFG_TIMINT_BITS 32
|
||||
|
||||
// <o> 定时查询定时器位数
|
||||
// <8=> 8位 <16=> 16位 <32=> 32位
|
||||
// <i> 如果MCU内核为8051,此项建议尽量配置为低位,以提高性能。
|
||||
#define SYSCFG_TIMQRYBITS 32
|
||||
#define SYSCFG_TIMQRY_BITS 32
|
||||
|
||||
// </h>
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@@ -354,7 +359,7 @@
|
||||
// <o> 计数信号量位数
|
||||
// <8=> 8位 <16=> 16位 <32=> 32位
|
||||
// <i> 如果MCU内核为8051,此项建议尽量配置为低位,以提高性能。
|
||||
#define SYSCFG_SEMAPHOREBITS 32
|
||||
#define SYSCFG_SEMAPH_BITS 32
|
||||
// </e>
|
||||
|
||||
// <q> 事件标志组
|
||||
@@ -373,10 +378,16 @@
|
||||
// <i> 是否启用消息邮箱?
|
||||
#define SYSCFG_MAILBOX 1
|
||||
|
||||
// <q> 消息队列
|
||||
// <e> 消息队列
|
||||
// <i> 是否启用消息队列?
|
||||
#define SYSCFG_MSGQUEUE 1
|
||||
|
||||
// <q> 中断中接收
|
||||
// <i> 是否需要在用户中断中接收消息?
|
||||
// <i> 如果不会在用户中断中接收消息,建议关闭该选项。
|
||||
// <i> 关闭该选项可使队列为无锁队列,性能进一步提升。
|
||||
#define SYSCFG_MSGQUEUE_INTRECV 1
|
||||
// </e>
|
||||
// </h>
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// <h> 杂项设置
|
||||
|
||||
@@ -2,24 +2,21 @@
|
||||

|
||||

|
||||

|
||||

|
||||

|
||||
[](https://gitee.com/cosyos/cosyos/stargazers)
|
||||
[](https://gitee.com/cosyos/cosyos/members)
|
||||
|
||||
* CosyOS-QQ交流群:303421780.
|
||||
|
||||
### 最新消息
|
||||
* CosyOS-III V2.3.0 发布,私信回归了,与之前版本相比,更为易用和高效、也更加可靠,欢迎大家踊跃试用!<br>
|
||||
Demo-Service > 2、消息同步,有例程可做为参考。
|
||||
* CosyOS官网 [https://www.cosyos.com](https://www.cosyos.com),现已正式上线,诚邀您莅临访问!<br>
|
||||
当前正处于建站初期,各方面内容都还不够丰富,正在持续优化并完善中。。。
|
||||
* 近日,新增 例程-服务应用,为用户示范各项常用服务的典型应用,并在未来会陆续优化完善。
|
||||
* CosyOS-III V2.0.0 发布,推出了中断挂起服务_FIFO-错误调用返回,这标志着CosyOS进一步走向成熟和完善。
|
||||
* CosyOS-III V1.4.0 发布,推出了升级安装程序 CosyOS-III Cube.exe,可轻松将裸机工程升级为CosyOS工程。
|
||||
* CosyOS-III V1.3.8 发布,完善了对 Arm Compiler 5/6、GNU Compiler、IAR Compiler 等主流编译器的支持。
|
||||
* CosyOS-III V1.3.0 发布,解决了当嵌套获取多个互斥信号量时,可能会发生的优先级反转问题(该bug普遍存在于常见主流RTOS中)。
|
||||
* CosyOS 又取得新突破,现已升级至 **CosyOS-III**,说明文档持续更新中。。。<br>
|
||||
原有 CosyOS-I、CosyOS-II 停止更新维护,但仍提供技术支持。
|
||||
### 移植流程
|
||||
* **裸机工程**
|
||||
先准备好项目的裸机工程。
|
||||
* **升级安装**
|
||||
参照 Setup\readme.txt 中的说明,把 裸机工程 升级为 CosyOS工程。
|
||||
* **系统构建**
|
||||
打开工程,参照 CosyOS-例程(系统构建)> readme.txt 中的说明,完成系统构建。<br>
|
||||
|
||||
现在,您可以愉快的使用CosyOS了!
|
||||
|
||||
### 序言
|
||||
* 近年来,随着RTOS的普及及在嵌入式设备中的广泛应用,以关闭总中断等方式来保护临界段所带来的危害性(丢失响应、处理延误)正日益凸显出来,其中以高速通讯接收丢帧、高速捕获丢失脉冲等中断丢失响应现象最为紧要和普遍。有些RTOS关闭总中断可能过于频繁,且未能提供“系统最大关闭总中断时间”等核心关键参数,实时性有待商榷。<br>
|
||||
@@ -100,17 +97,19 @@ dCreateTask(task_3, 3, 384, 9, "task_key")
|
||||
# 启动钩子
|
||||
void start_hook(void)
|
||||
{
|
||||
// uScheduleLock(); // 如果不想在启动任务过程中进行任务调度,可开启调度锁。
|
||||
uStartTask_Ready (task_1); // 启动 task_1,初始状态为就绪状态
|
||||
uStartTask_Block (task_2); // 启动 task_2,初始状态为阻塞状态(阻塞类型为延时阻塞,延时时间为无限长)
|
||||
uStartTask_Suspend(task_3); // 启动 task_3,初始状态为挂起状态
|
||||
// uScheduleUnlock();
|
||||
}
|
||||
```
|
||||
|
||||
您有没有眼前一亮呢?CosyOS创建任务竟如此简单,通过调用API并输入各项参数,而后直接写任务代码即可。下一步就是在启动钩子中启动任务,任务便可参与调度并运行了。 _**任务静态创建与动态创建的相互转换也极为便利,API名称中,仅需 “u”改“d” 或 “d”改“u” 即可。**_
|
||||
|
||||
### 突破创新
|
||||
* 所有支持内核均可实现全局不关总中断、**零中断延迟**,从系统层面保证了用户中断的实时响应
|
||||
* 领先的零中断延迟技术,率先应用于8051、Cortex-M0等处理器,在世界上可能尚属首例
|
||||
* 所有支持内核均可实现 **全局不关总中断、零中断延迟**,从系统层面保证了用户中断的实时响应
|
||||
* 领先的零中断延迟技术,率先应用于 8051、Cortex-M0 等处理器,在世界上可能尚属首例
|
||||
* **任务就绪表**,采用 零/一/二级位图,保证了抢占式任务调度的硬实时性
|
||||
* **三维链表**技术,可显著的减少操作链表,服务的执行速度更快
|
||||
* 创新的**协作式调度**,协作仅作用于相同优先级的任务,具有高度的实用价值
|
||||
@@ -148,7 +147,7 @@ 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/%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3/CosyOS-III%20API%E7%94%A8%E6%88%B7%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C%20V2.0.0.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%20V2.3.4.chm)
|
||||
|
||||
### 参与贡献
|
||||
|
||||
|
||||
Binary file not shown.
+4
-2
@@ -4,13 +4,15 @@
|
||||
* @brief 系统链接头文件
|
||||
* @details 用户的各个c文件中应包含此文件。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.4.1
|
||||
* @date 2026.06.28
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __COSYOS_H
|
||||
#define __COSYOS_H
|
||||
|
||||
#define COSYOS3_VERSION "v2.4.1"
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_com.h"
|
||||
|
||||
+9
-9
@@ -3,8 +3,8 @@
|
||||
* @file os_api.h
|
||||
* @brief 系统内核专用API
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.5
|
||||
* @date 2026.06.10
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_API_H
|
||||
@@ -33,27 +33,27 @@
|
||||
|
||||
/** 启动定时中断任务 */
|
||||
#define sStartTask_TimInt(tmid) \
|
||||
sUSV_StartTask_0(s_timint_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
|
||||
sUSV_StartTask_0(s_timint_handle[tmid]->hookorload.load, OS_STATUS_SUSPENDED)
|
||||
|
||||
/** 启动定时查询任务 */
|
||||
#define sStartTask_TimQry(tmid) \
|
||||
sUSV_StartTask_0(s_timqry_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
|
||||
sUSV_StartTask_0(s_timqry_handle[tmid]->hookorload.load, OS_STATUS_SUSPENDED)
|
||||
|
||||
/** 恢复定时中断任务 */
|
||||
#define sResumeTask_TimInt(tmid) \
|
||||
sTSV_ResumeTask(*(s_timint_handle[tmid]->hookorhand.hand)->dualhandle)
|
||||
sTSV_ResumeTask(*(s_timint_handle[tmid]->hookorload.load)->h2task)
|
||||
|
||||
/** 恢复定时查询任务 */
|
||||
#define sResumeTask_TimQry(tmid) \
|
||||
sTSV_ResumeTask(*(s_timqry_handle[tmid]->hookorhand.hand)->dualhandle)
|
||||
sTSV_ResumeTask(*(s_timqry_handle[tmid]->hookorload.load)->h2task)
|
||||
|
||||
/** 调用定时中断钩子 */
|
||||
#define sCallHook_TimInt(tmid) \
|
||||
(*s_timint_handle[tmid]->hookorhand.hook)()
|
||||
(*s_timint_handle[tmid]->hookorload.hook)()
|
||||
|
||||
/** 调用定时查询钩子 */
|
||||
#define sCallHook_TimQry(tmid) \
|
||||
(*s_timqry_handle[tmid]->hookorhand.hook)()
|
||||
(*s_timqry_handle[tmid]->hookorload.hook)()
|
||||
|
||||
|
||||
/*
|
||||
@@ -220,7 +220,7 @@ sTaskMsg_Init_7(g); \
|
||||
tm8##g = tm8_##g
|
||||
|
||||
#define sTaskMsg_Init(n) \
|
||||
static volatile s_u8_t u_tmrf = 0; \
|
||||
static s_u8_t volatile u_tmrf = 0; \
|
||||
if(s_taskmsg_sign){ \
|
||||
u_tmrf = 1; \
|
||||
sTaskMsg_Init_##n(_); \
|
||||
|
||||
+3
-3
@@ -4,8 +4,8 @@
|
||||
* @brief DEBUG接口
|
||||
* @details DEBUG接口,串口发送和接收解析。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.2
|
||||
* @date 2026.03.08
|
||||
* @version V2.3.5
|
||||
* @date 2026.06.10
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -24,7 +24,7 @@
|
||||
\note Keil C51/C251 标准库中的 atoi() 是非线程安全的,故额外定义此函数,
|
||||
专用于DEBUG接口的串口接收解析。
|
||||
*/
|
||||
static int _atoi_(const char* str)
|
||||
static int _atoi_(char const *str)
|
||||
{
|
||||
if(str == OS_NULL || !*str){
|
||||
return 0;
|
||||
|
||||
+45
-37
@@ -3,8 +3,8 @@
|
||||
* @file os_def.h
|
||||
* @brief 初始宏定义
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.18
|
||||
* @version V2.4.0
|
||||
* @date 2026.06.22
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_DEF_H
|
||||
@@ -33,8 +33,7 @@
|
||||
|
||||
#define true 1
|
||||
#define false 0
|
||||
#define OS_NULL 0 /*!< 通用的空指针 */
|
||||
#define OS_VOID ((s_tasknode_tsp)~0) /*!< 专用的空指针,超时链表专用。*/
|
||||
#define OS_NULL 0
|
||||
|
||||
|
||||
/*
|
||||
@@ -52,6 +51,9 @@
|
||||
#define __ARM__ 2 /*!< 指令集架构:ARM ...... */
|
||||
#define __COOPERATIVE__ 1 /*!< 协作式调度............ */
|
||||
#define __TIMESHARING__ 2 /*!< 时间片轮转调度........ */
|
||||
#define __MSP__ 0x01
|
||||
#define __PSP__ 0x02
|
||||
#define __MSP_PSP__ (__MSP__ | __PSP__)
|
||||
|
||||
|
||||
/*
|
||||
@@ -100,45 +102,51 @@
|
||||
* SVID(服务ID,中断FIFO服务-系统专用ID)
|
||||
*/
|
||||
|
||||
#define OS_SVID_CLEARDELAY 0x00
|
||||
#define OS_SVID_RESUMETASK 0x01
|
||||
#define OS_SVID_SUSPENDTASK 0x02
|
||||
#define OS_SVID_DELETETASK 0x03
|
||||
#define OS_SVID_CLEARBLOCK 0x04
|
||||
#define OS_SVID_SETBLOCK 0x05
|
||||
#define OS_SVID_SETTASKPRI 0x06
|
||||
#define OS_SVID_WRITEBINARY 0x07
|
||||
#define OS_SVID_GIVESEMAPH 0x08
|
||||
#define OS_SVID_SENDFETION 0x09
|
||||
#define OS_SVID_SENDMAIL 0x0A
|
||||
#define OS_SVID_SENDMSG 0x0B
|
||||
#define OS_SVID_TIMINT 0x0C
|
||||
#define OS_SVID_TIMQRY 0x0D
|
||||
#define OS_SVID_WRITEGROUP 0x0E
|
||||
#define OS_SVID_WRITEGVAR 0x0F
|
||||
#define OS_SVID_PENDSVC 0x10
|
||||
#define OS_SVID_END 0x11
|
||||
#define OS_SVID_CLEARDELAY 0x00 /*!< 清除就绪延时 ....... */
|
||||
#define OS_SVID_RESUMETASK 0x01 /*!< 恢复任务 ........... */
|
||||
#define OS_SVID_SUSPENDTASK 0x02 /*!< 挂起任务 ........... */
|
||||
#define OS_SVID_DELETETASK 0x03 /*!< 删除任务 ........... */
|
||||
#define OS_SVID_RESETTASK 0x04 /*!< 重置任务 ........... */
|
||||
#define OS_SVID_CLEARBLOCK 0x05 /*!< 清除阻塞 ........... */
|
||||
#define OS_SVID_SETBLOCK 0x06 /*!< 设置阻塞 ........... */
|
||||
#define OS_SVID_SETTASKPRI 0x07 /*!< 设置任务优先级 ..... */
|
||||
#define OS_SVID_WRITEBINARY 0x08 /*!< 写二值信号量 ....... */
|
||||
#define OS_SVID_GIVESEMAPH 0x09 /*!< 给予计数信号量 ..... */
|
||||
#define OS_SVID_SENDFETION 0x0A /*!< 发送飞信 ........... */
|
||||
#define OS_SVID_SENDMAIL 0x0B /*!< 发送邮件 ........... */
|
||||
#define OS_SVID_SENDMSG 0x0C /*!< 发送消息 ........... */
|
||||
#define OS_SVID_TIMINT 0x0D /*!< 定时中断 ........... */
|
||||
#define OS_SVID_TIMQRY 0x0E /*!< 定时查询 ........... */
|
||||
#define OS_SVID_WRITEGROUP 0x0F /*!< 写标志组 ........... */
|
||||
#define OS_SVID_WRITEGVAR 0x10 /*!< 写全局变量 ......... */
|
||||
#define OS_SVID_PENDSVC 0x11 /*!< 挂起服务调用 ....... */
|
||||
#define OS_SVID_END 0x12
|
||||
|
||||
|
||||
/*
|
||||
* ECODE(错误码)
|
||||
*/
|
||||
|
||||
#define OS_ECODE_NOERROR 0 /*!< 无错误 ............. */
|
||||
#define OS_ECODE_OVERFLOW_MSGQUEUE 1 /*!< 消息队列溢出 ....... */
|
||||
#define OS_ECODE_OVERFLOW_TASKQUEUE 2 /*!< 任务队列溢出 ....... */
|
||||
#define OS_ECODE_OVERFLOW_TASKSTACK 3 /*!< 任务栈溢出 ......... */
|
||||
#define OS_ECODE_MALLOCFAIL_MSGNODE 4 /*!< 消息节点内存分配失败 */
|
||||
#define OS_ECODE_MALLOCFAIL_TASKNODE 5 /*!< 任务节点内存分配失败 */
|
||||
#define OS_ECODE_MALLOCFAIL_TASKSTACK 6 /*!< 任务栈内存分配失败 . */
|
||||
#define OS_ECODE_TASKSUSPENDED 7 /*!< 任务已挂起 ......... */
|
||||
#define OS_ECODE_TASKSTOPPED 8 /*!< 任务已停止 ......... */
|
||||
#define OS_ECODE_TASKNOTSTARTED 9 /*!< 任务未启动/已删除 .. */
|
||||
#define OS_ECODE_TASKNOTREADY 10 /*!< 任务未就绪 ......... */
|
||||
#define OS_ECODE_TASKNOTBLOCKED 11 /*!< 任务未阻塞 ......... */
|
||||
#define OS_ECODE_TASKNOTSUSPENDED 12 /*!< 任务未挂起 ......... */
|
||||
#define OS_ECODE_TASKPRIUNCHANGED 13 /*!< 任务优先级未改变 ... */
|
||||
#define OS_ECODE_DONOTKNOW 255 /*!< 未知错误 ........... */
|
||||
#define OS_ECODE_NOERROR 0x00 /*!< 无错误 ............. */
|
||||
|
||||
#define OS_ECODE_TASKSTARTED 0x0D /*!< 任务已启动 ......... */
|
||||
#define OS_ECODE_TASKSUSPENDED 0x0E /*!< 任务已挂起 ......... */
|
||||
#define OS_ECODE_TASKSTOPPED 0x0F /*!< 任务已停止 ......... */
|
||||
#define OS_ECODE_TASKDELETED 0x10 /*!< 任务已删除 ......... */
|
||||
#define OS_ECODE_TASKNOTSTARTED 0x10 /*!< 任务未启动 ......... */
|
||||
#define OS_ECODE_TASKNOTBLOCKED 0x11 /*!< 任务未阻塞 ......... */
|
||||
#define OS_ECODE_TASKNOTSUSPENDED 0x12 /*!< 任务未挂起 ......... */
|
||||
#define OS_ECODE_TASKPRIUNCHANGED 0x13 /*!< 任务优先级未改变 ... */
|
||||
|
||||
#define OS_ECODE_OVERFLOW_MSGQUEUE 0x21 /*!< 消息队列溢出 ....... */
|
||||
#define OS_ECODE_OVERFLOW_TASKQUEUE 0x22 /*!< 任务队列溢出 ....... */
|
||||
#define OS_ECODE_OVERFLOW_TASKSTACK 0x23 /*!< 任务栈溢出 ......... */
|
||||
|
||||
#define OS_ECODE_MALLOCFAIL_MSGNODE 0x31 /*!< 消息节点内存分配失败 */
|
||||
#define OS_ECODE_MALLOCFAIL_TASKNODE 0x32 /*!< 任务节点内存分配失败 */
|
||||
#define OS_ECODE_MALLOCFAIL_TASKSTACK 0x33 /*!< 任务栈内存分配失败 . */
|
||||
|
||||
#define OS_ECODE_DONOTKNOW 0xFF /*!< 未知错误 ........... */
|
||||
|
||||
|
||||
|
||||
|
||||
+109
-101
File diff suppressed because it is too large
Load Diff
+154
-115
File diff suppressed because it is too large
Load Diff
+10
-2
@@ -3,8 +3,8 @@
|
||||
* @file os_sysidle.c
|
||||
* @brief 系统空闲任务(Sysidle)
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.2
|
||||
* @date 2026.03.08
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -46,6 +46,14 @@ uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
|
||||
#if (SYSCFG_IDLEHOOK == __ENABLED__)
|
||||
idle_hook();
|
||||
#endif
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__) && (MCUCFG_TASKSTACK_MODE & __MSP__)
|
||||
if(true){
|
||||
m_stacklen_t len = mMainStack_Check();
|
||||
if(m_stacklen_max < len){
|
||||
m_stacklen_max = len;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if (SYSCFG_LOWPOWERMODE == __ENABLED__)
|
||||
mCosyOS_IDLE();
|
||||
#endif
|
||||
|
||||
+36
-28
@@ -3,17 +3,12 @@
|
||||
* @file os_taskmgr.c
|
||||
* @brief 任务管理器(Taskmgr)
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.2
|
||||
* @date 2026.03.08
|
||||
* @version V2.3.9
|
||||
* @date 2026.06.20
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "CosyOS.H"
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
#include "os_api.h"
|
||||
#include "sv_com.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "ur_api.h"
|
||||
#include <string.h>
|
||||
|
||||
/**
|
||||
@@ -40,7 +35,7 @@ static char _XDATA_MEM_ * _SYS_MEM_ mptr; /*!< 指向任务管理器发送缓存
|
||||
\param[in] n 字符的数量
|
||||
\return 无
|
||||
*/
|
||||
static void _chrncpy_(const char c, s_u8_t n)
|
||||
static void _chrncpy_(char const c, s_u8_t n)
|
||||
{
|
||||
do{
|
||||
*mptr++ = c;
|
||||
@@ -64,7 +59,7 @@ static void _spccpy_(s_u8_t n)
|
||||
\param[in] s 字符串指针
|
||||
\return 无
|
||||
*/
|
||||
static void _strcpy_(const char *s)
|
||||
static void _strcpy_(char const *s)
|
||||
{
|
||||
while(*s){
|
||||
*mptr++ = *s++;
|
||||
@@ -76,7 +71,7 @@ static void _strcpy_(const char *s)
|
||||
\param[in] s 字符串指针
|
||||
\return 字符串长度
|
||||
*/
|
||||
static s_u8_t _strlen_(const char *s)
|
||||
static s_u8_t _strlen_(char const *s)
|
||||
{
|
||||
s_u8_t i = 0;
|
||||
while(*s++){
|
||||
@@ -90,7 +85,7 @@ static s_u8_t _strlen_(const char *s)
|
||||
\param[in] var u8型数据
|
||||
\return 无
|
||||
*/
|
||||
static void _u8str_(const s_u8_t var)
|
||||
static void _u8str_(s_u8_t const var)
|
||||
{
|
||||
char _STR_MEM_ *ptr = str;
|
||||
if(var >= 100){
|
||||
@@ -115,7 +110,7 @@ static void _u8str_(const s_u8_t var)
|
||||
\param[in] var u16型数据
|
||||
\return 无
|
||||
*/
|
||||
static void _u16str_(const s_u16_t var)
|
||||
static void _u16str_(s_u16_t const var)
|
||||
{
|
||||
char _STR_MEM_ *ptr = str;
|
||||
if(var >= 10000){
|
||||
@@ -150,7 +145,7 @@ static void _u16str_(const s_u16_t var)
|
||||
\param[in] var u16型数据
|
||||
\return 长度
|
||||
*/
|
||||
static s_u8_t _u16len_(const s_u16_t var)
|
||||
static s_u8_t _u16len_(s_u16_t const var)
|
||||
{
|
||||
if(var >= 10000) return 5;
|
||||
if(var >= 1000) return 4;
|
||||
@@ -164,7 +159,7 @@ static s_u8_t _u16len_(const s_u16_t var)
|
||||
\param[in] num 分子(分母:10000)
|
||||
\return 无
|
||||
*/
|
||||
static void _used_ratio_(const s_u16_t num)
|
||||
static void _used_ratio_(s_u16_t const num)
|
||||
{
|
||||
s_u8_t i;
|
||||
if(!num){
|
||||
@@ -209,7 +204,7 @@ static void _used_ratio_(const s_u16_t num)
|
||||
\return 无
|
||||
\note 用于输出任务PC,十六进制字母为大写。
|
||||
*/
|
||||
static void _u8str16_(const s_u8_t var)
|
||||
static void _u8str16_(s_u8_t const var)
|
||||
{
|
||||
str[0] = (var >> 4) + '0';
|
||||
str[1] = (var & 0x0F) + '0';
|
||||
@@ -223,7 +218,7 @@ static void _u8str16_(const s_u8_t var)
|
||||
/**
|
||||
\brief 任务管理器
|
||||
\param[in] 定时器ID OS_TMID_TASKMGR
|
||||
\param[in] 定时查询事件 s_sign_taskmgr
|
||||
\param[in] 定时查询事件 s_taskmgr_sign
|
||||
\param[in] 自动重装载 true
|
||||
\param[in] 任务名称 Taskmgr
|
||||
\param[in] 任务优先级 SYSCFG_TASKPRIORITY - 2
|
||||
@@ -257,8 +252,7 @@ uCreateTask_TimQry
|
||||
_spccpy_(OS_TASKMGR_LEN_LINE - OS_TASKMGR_LEN_CPU - OS_TASKMGR_LEN_RAM - 10);
|
||||
#endif
|
||||
p[0] = mptr; /*!< 缓存CPU总使用率开始指针 */
|
||||
_spccpy_(OS_TASKMGR_LEN_CPU + OS_TASKMGR_LEN_RAM - 8);
|
||||
_strcpy_("CosyOS-3");
|
||||
_spccpy_(OS_TASKMGR_LEN_CPU + OS_TASKMGR_LEN_RAM);
|
||||
_strcpy_("\r\n");
|
||||
/* 标题2 */
|
||||
#if (SYSCFG_DEBUG_LANGUAGE == 0)
|
||||
@@ -295,8 +289,8 @@ uCreateTask_TimQry
|
||||
s_u8_t i = (s_u8_t)(SYSCFG_TASKPRIORITY);
|
||||
s_u16_t numerator1 = 10000;
|
||||
s_u32_t upspeed;
|
||||
s_tasknode_tsp node_curr;
|
||||
static s_tasknode_ts node_temp;
|
||||
s_taskctrl_tsp node_curr;
|
||||
static s_taskctrl_ts node_temp;
|
||||
|
||||
mptr = p[1];
|
||||
mSysIRQ_Disable();
|
||||
@@ -311,7 +305,7 @@ uCreateTask_TimQry
|
||||
while(true){
|
||||
s_u16_t numerator2;
|
||||
mSysIRQ_Disable();
|
||||
s_memcpy(&node_temp, node_curr, sizeof(s_tasknode_ts));
|
||||
s_memcpy(&node_temp, node_curr, sizeof(s_taskctrl_ts));
|
||||
node_curr->usedtime[0] = 0;
|
||||
node_curr->usedtime[1] = 0;
|
||||
mSysIRQ_Enable();
|
||||
@@ -377,14 +371,14 @@ uCreateTask_TimQry
|
||||
/* 内存 */
|
||||
_spccpy_(
|
||||
(s_u8_t)(
|
||||
OS_TASKMGR_LEN_RAM - 4
|
||||
OS_TASKMGR_LEN_RAM - 3
|
||||
- _u16len_((s_u16_t)node_temp.stacklen_max)
|
||||
- _u16len_((s_u16_t)node_temp.stacksize)
|
||||
)
|
||||
);
|
||||
_u16str_(node_temp.stacklen_max);
|
||||
_strcpy_(str);
|
||||
_strcpy_("B/");
|
||||
_strcpy_("/");
|
||||
switch(node_temp.create){
|
||||
case 0: _chrcpy_('s'); break;
|
||||
case 1: _chrcpy_('m'); break;
|
||||
@@ -410,14 +404,23 @@ uCreateTask_TimQry
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/* CPU总使用率 */
|
||||
if(true){
|
||||
char _XDATA_MEM_ *p0 = mptr;
|
||||
/* 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');
|
||||
#endif
|
||||
mptr = p0;
|
||||
}
|
||||
|
||||
_strcpy_("\r\n"); /*!< null-line */
|
||||
/* PSV-FIFO */
|
||||
_strcpy_("PSV-FIFO: ");
|
||||
@@ -561,6 +564,9 @@ uCreateTask_TimQry
|
||||
if(s_alarm.overflow_taskstack){
|
||||
_strcpy_("ots, ");
|
||||
}
|
||||
if(s_alarm.task_repeated_startup){
|
||||
_strcpy_("trs, ");
|
||||
}
|
||||
mptr -= 2;
|
||||
}
|
||||
else{
|
||||
@@ -668,8 +674,10 @@ uCreateTask_TimQry
|
||||
_strcpy_("\r\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
_strcpy_("\r\n"); /*!< null-line */
|
||||
_spccpy_((s_u8_t)(OS_TASKMGR_LEN_LINE - 11 - _strlen_(COSYOS3_VERSION)));
|
||||
_strcpy_("CosyOS-III ");
|
||||
_strcpy_(COSYOS3_VERSION);
|
||||
_strcpy_("\r\n\r\n"); /*!< null-line */
|
||||
_chrcpy_('\0'); /*!< string-tail */
|
||||
/* - */
|
||||
mSysIRQ_Disable();
|
||||
|
||||
+40
-42
@@ -3,85 +3,83 @@
|
||||
* @file os_var.c
|
||||
* @brief 系统全局变量定义
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.01
|
||||
* @version V2.3.8
|
||||
* @date 2026.06.15
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_redef.h"
|
||||
|
||||
/* The Soft-RTC */
|
||||
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
||||
const s_u8_t _CONST_MEM_ s_month0day[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*!< 每月各有几天?*/
|
||||
s_u8_t _RTC_MEM_ s_month2day = 28; /*!< 二月有几天?*/
|
||||
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
|
||||
m_rtccount_t _SYS_MEM_ s_rtc_counter/**/sZeroInstall; /*!< RTC计数器 */
|
||||
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC */
|
||||
s_u8_t const _CONST_MEM_ s_month0day[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*!< 每月各有几天?*/
|
||||
s_u8_t _RTC_MEM_ s_month2day = 28; /*!< 二月有几天?*/
|
||||
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
|
||||
m_rtccount_t _SYS_MEM_ s_rtc_counter/**/sZeroInstall; /*!< RTC计数器 */
|
||||
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC */
|
||||
#endif
|
||||
/* The Task */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup = true;
|
||||
volatile s_schesign_tu _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
|
||||
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
|
||||
s_ecode_t _SYS_MEM_ s_startup_ecode = OS_ECODE_NOERROR; /*!< 启动任务时,用来异地缓存错误码 */
|
||||
s_u8_t _SYS_MEM_ s_task_status0 = OS_STATUS_DELETED; /*!< 被启动任务 -> 初始状态 */
|
||||
s_taskhand_tsp _SYS_MEM_ s_task_starter/**/sZeroInstall; /*!< 被启动任务 -> 装载块句柄 */
|
||||
s_tasknode_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
|
||||
s_tasknode_tsp s_timer_list[OS_TIMESLOTNUM]/**/sZeroInstall_Group; /*!< 定时器链表 */
|
||||
s_u8_t _SYS_MEM_ s_timer_pointer = OS_TIMESLOTNUM - 1UL;
|
||||
m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup = true;
|
||||
s_schesign_tu volatile _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
|
||||
m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
|
||||
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
|
||||
s_taskstart_ts _SYS_MEM_ s_task_starter/**/sZeroInstall_Group; /*!< 任务启动器 */
|
||||
s_taskctrl_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
|
||||
s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM]/**/sZeroInstall_Group; /*!< 定时器链表 */
|
||||
s_u8_t _SYS_MEM_ s_timer_pointer = OS_TIMESLOTNUM - 1UL;
|
||||
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
||||
const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
|
||||
s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
|
||||
#endif
|
||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
|
||||
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
|
||||
#endif
|
||||
/* The Safe runtime */
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
m_bit_t /*_SYS_MEM_*/ s_timeout_sign/**/sZeroInstall; /*!< 超时信号 */
|
||||
s_tasknode_tsp _SYS_MEM_ s_timeout_list = OS_VOID; /*!< 超时链表 */
|
||||
m_bit_t /*_SYS_MEM_*/ s_timeout_sign/**/sZeroInstall; /*!< 超时信号 */
|
||||
s_taskctrl_tsp _STATIC_MEM_ s_timeout_list/**/sZeroInstall; /*!< 超时链表 */
|
||||
#endif
|
||||
/* The Timing Interrupt */
|
||||
#if (OS_TIMINTTOTAL > 0)
|
||||
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
|
||||
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
|
||||
#endif
|
||||
/* The Timing Query */
|
||||
#if (OS_TIMQRYTOTAL > 0)
|
||||
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
|
||||
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
|
||||
#endif
|
||||
/* The Task Message */
|
||||
#if (SYSCFG_TASKMSG == __ENABLED__)
|
||||
volatile s_u8_t /*_SYS_MEM_*/ s_taskmsg_sign/**/sZeroInstall; /*!< 发送私信信号 */
|
||||
s_u8_t volatile _SYS_MEM_ s_taskmsg_sign/**/sZeroInstall; /*!< 发送私信信号 */
|
||||
#endif
|
||||
/* The Debug Interface */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
m_bit_t /*_SYS_MEM_*/ s_debug_sendsign/**/sZeroInstall;
|
||||
s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
|
||||
s_u8_t _SYS_MEM_ s_debug_recvlen/**/sZeroInstall;
|
||||
char * _XDATA_MEM_ s_debug_recvptr;/*
|
||||
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
m_bit_t /*_SYS_MEM_*/ s_debug_sendsign/**/sZeroInstall;
|
||||
s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
|
||||
s_u8_t _SYS_MEM_ s_debug_recvlen/**/sZeroInstall;
|
||||
char * _XDATA_MEM_ s_debug_recvptr;/*
|
||||
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
#endif*/
|
||||
m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign = SYSCFG_TASKMGR_AUTOSTART;
|
||||
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign = SYSCFG_TASKMGR_AUTOSTART;
|
||||
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
#endif
|
||||
s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed/**/sZeroInstall;
|
||||
s_alarm_ts _DEBUG_MEM_ s_alarm/**/sZeroInstall_Group;
|
||||
s_fault_ts _DEBUG_MEM_ s_fault/**/sZeroInstall_Group;
|
||||
s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed/**/sZeroInstall;
|
||||
s_alarm_ts _DEBUG_MEM_ s_alarm/**/sZeroInstall_Group;
|
||||
s_fault_ts _DEBUG_MEM_ s_fault/**/sZeroInstall_Group;
|
||||
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
||||
s_u32_t _DEBUG_MEM_ s_tick_count1/**/sZeroInstall;
|
||||
s_u32_t _DEBUG_MEM_ s_tick_count2/**/sZeroInstall;
|
||||
s_u32_t _DEBUG_MEM_ s_tick_count1/**/sZeroInstall;
|
||||
s_u32_t _DEBUG_MEM_ s_tick_count2/**/sZeroInstall;
|
||||
#endif
|
||||
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
||||
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
|
||||
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
|
||||
#endif
|
||||
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
||||
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
|
||||
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task */
|
||||
const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
||||
s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
||||
{
|
||||
#if (SYSCFG_TASKPICKBITMAP == 1)
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
|
||||
@@ -113,7 +111,7 @@ const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
|
||||
/* F */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
||||
#endif
|
||||
}; /*!< Task pick bitmap */
|
||||
s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
|
||||
s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
|
||||
m_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
|
||||
#if (SYSCFG_TASKPRIORITY > 64)
|
||||
s_u8_t _QUE_MEM_ s_task_table_index/**/sZeroInstall; /*!< 任务表索引 */
|
||||
|
||||
+40
-42
@@ -3,8 +3,8 @@
|
||||
* @file os_var.h
|
||||
* @brief 系统全局变量声明
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.01
|
||||
* @version V2.3.8
|
||||
* @date 2026.06.15
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_VAR_H
|
||||
@@ -13,78 +13,76 @@
|
||||
|
||||
/* The Soft-RTC */
|
||||
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
||||
extern const s_u8_t _CONST_MEM_ s_month0day[13];
|
||||
extern s_u8_t _RTC_MEM_ s_month2day;
|
||||
extern s_every_ts _SYS_MEM_ s_sign_every;
|
||||
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
|
||||
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
||||
extern s_u8_t const _CONST_MEM_ s_month0day[13];
|
||||
extern s_u8_t _RTC_MEM_ s_month2day;
|
||||
extern s_every_ts _SYS_MEM_ s_sign_every;
|
||||
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
|
||||
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
||||
#endif
|
||||
/* The Task */
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup;
|
||||
extern volatile s_schesign_tu _SYS_MEM_ s_sign_schedule;
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay;
|
||||
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
||||
extern s_ecode_t _SYS_MEM_ s_startup_ecode;
|
||||
extern s_u8_t _SYS_MEM_ s_task_status0;
|
||||
extern s_taskhand_tsp _SYS_MEM_ s_task_starter;
|
||||
extern s_tasknode_tsp _SYS_MEM_ s_task_current;
|
||||
extern s_tasknode_tsp s_timer_list[OS_TIMESLOTNUM];
|
||||
extern s_u8_t _SYS_MEM_ s_timer_pointer;
|
||||
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup;
|
||||
extern s_schesign_tu volatile _SYS_MEM_ s_sign_schedule;
|
||||
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay;
|
||||
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
||||
extern s_taskstart_ts _SYS_MEM_ s_task_starter;
|
||||
extern s_taskctrl_tsp _SYS_MEM_ s_task_current;
|
||||
extern s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM];
|
||||
extern s_u8_t _SYS_MEM_ s_timer_pointer;
|
||||
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
||||
extern const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
||||
extern s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
||||
#endif
|
||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
||||
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
||||
#endif
|
||||
/* The Safe runtime */
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
|
||||
extern s_tasknode_tsp _SYS_MEM_ s_timeout_list;
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
|
||||
extern s_taskctrl_tsp _STATIC_MEM_ s_timeout_list;
|
||||
#endif
|
||||
/* The Timing Interrupt */
|
||||
#if (OS_TIMINTTOTAL > 0)
|
||||
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
||||
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
||||
#endif
|
||||
/* The Timing Query */
|
||||
#if (OS_TIMQRYTOTAL > 0)
|
||||
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
||||
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
||||
#endif
|
||||
/* The Task Message */
|
||||
#if (SYSCFG_TASKMSG == __ENABLED__)
|
||||
extern volatile s_u8_t /*_SYS_MEM_*/ s_taskmsg_sign;
|
||||
extern s_u8_t volatile _SYS_MEM_ s_taskmsg_sign;
|
||||
#endif
|
||||
/* The Debug Interface */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
|
||||
extern char * _XDATA_MEM_ s_debug_recvptr;/*
|
||||
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
|
||||
extern char * _XDATA_MEM_ s_debug_recvptr;/*
|
||||
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
#endif*/
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
|
||||
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
|
||||
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
#endif
|
||||
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
|
||||
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
|
||||
extern s_fault_ts _DEBUG_MEM_ s_fault;
|
||||
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
|
||||
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
|
||||
extern s_fault_ts _DEBUG_MEM_ s_fault;
|
||||
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
|
||||
#endif
|
||||
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
||||
extern m_pc_t _SYS_MEM_ s_pc;
|
||||
extern m_pc_t _SYS_MEM_ s_pc;
|
||||
#endif
|
||||
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
||||
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
||||
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task */
|
||||
extern const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
|
||||
extern s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
||||
extern s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
|
||||
extern s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
||||
extern m_tqcount_t _QUE_MEM_ s_task_queue_count;
|
||||
#if (SYSCFG_TASKPRIORITY > 64)
|
||||
extern s_u8_t _QUE_MEM_ s_task_table_index;
|
||||
|
||||
+126
-42
File diff suppressed because it is too large
Load Diff
+29
-27
@@ -4,41 +4,43 @@
|
||||
* @brief 内核公共服务
|
||||
* @details 在服务层临界区中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_COM_H
|
||||
#define __SV_COM_H
|
||||
|
||||
#include "os_redef.h"
|
||||
void sa_add_ready (s_tasknode_tsp htask);
|
||||
void sa_remove_ready (s_tasknode_tsp htask);
|
||||
void sa_insert_taskque (s_tasknode_tsp htask);
|
||||
void sa_remove_taskque (s_tasknode_tsp htask);
|
||||
void sa_insert_blocklist (s_tasknode_tsp *h2task);
|
||||
void sa_remove_blocklist (s_tasknode_tsp htask);
|
||||
void sa_insert_timerlist (s_tasknode_tsp htask, s_delay_t tick);
|
||||
void sa_remove_timerlist (s_tasknode_tsp htask);
|
||||
void sa_block_to_float (s_tasknode_tsp htask);
|
||||
void sa_float_to_block (s_tasknode_tsp htask);
|
||||
void sa_block_to_ready (s_tasknode_tsp htask);
|
||||
void sa_resume_task (s_tasknode_tsp htask);
|
||||
void sa_suspend_task (s_tasknode_tsp htask);
|
||||
void sa_stop_task (s_tasknode_tsp htask);
|
||||
void sa_free_task (s_tasknode_tsp htask);
|
||||
void sa_delete_task (s_tasknode_tsp htask);
|
||||
void sa_clear_block (s_tasknode_tsp htask);
|
||||
void sa_set_block (s_tasknode_tsp htask, s_delay_t tick);
|
||||
void sa_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
|
||||
void sa_add_ready (s_taskctrl_tsp htask);
|
||||
void sa_remove_ready (s_taskctrl_tsp htask);
|
||||
void sa_insert_taskque (s_taskctrl_tsp htask);
|
||||
void sa_remove_taskque (s_taskctrl_tsp htask);
|
||||
void sa_insert_blocklist (s_taskctrl_tsp *h2task);
|
||||
void sa_remove_blocklist (s_taskctrl_tsp htask);
|
||||
void sa_insert_timerlist (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
void sa_remove_timerlist (s_taskctrl_tsp htask);
|
||||
void sa_block_to_float (s_taskctrl_tsp htask);
|
||||
void sa_float_to_block (s_taskctrl_tsp htask);
|
||||
void sa_block_to_ready (s_taskctrl_tsp htask);
|
||||
void sa_resume_task (s_taskctrl_tsp htask);
|
||||
void sa_suspend_task (s_taskctrl_tsp htask);
|
||||
void sa_stop_task (s_taskctrl_tsp htask);
|
||||
void sa_free_task (s_taskctrl_tsp htask);
|
||||
void sa_delete_task (s_taskctrl_tsp htask);
|
||||
void sa_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||
void sa_clear_block (s_taskctrl_tsp htask);
|
||||
void sa_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
void sa_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||
|
||||
void sc_clear_delay (void);
|
||||
s_ecode_t sc_resume_task (s_tasknode_tsp htask);
|
||||
s_ecode_t sc_suspend_task (s_tasknode_tsp htask);
|
||||
s_ecode_t sc_delete_task (s_tasknode_tsp htask);
|
||||
s_ecode_t sc_clear_block (s_tasknode_tsp htask);
|
||||
s_ecode_t sc_set_block (s_tasknode_tsp htask, s_delay_t tick);
|
||||
s_ecode_t sc_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
|
||||
s_ecode_t sc_resume_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_suspend_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_delete_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||
s_ecode_t sc_clear_block (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
s_ecode_t sc_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||
void sc_write_binary (s_binary_tsp hbin, bool value);
|
||||
void sc_give_semaph (s_semaph_tsp hsem);
|
||||
void sc_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
|
||||
|
||||
+65
-45
File diff suppressed because it is too large
Load Diff
+62
-14
@@ -4,8 +4,8 @@
|
||||
* @brief 中断FIFO服务-执行函数
|
||||
* @details 仅在 PendSV中断 中由系统调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -57,7 +57,7 @@ static void _clear_delay_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_resume_task(htask);
|
||||
if(_ecode){
|
||||
@@ -84,7 +84,7 @@ static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_suspend_task(htask);
|
||||
if(_ecode){
|
||||
@@ -111,7 +111,7 @@ static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_delete_task(htask);
|
||||
if(_ecode){
|
||||
@@ -129,6 +129,34 @@ static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#define _delete_task_ OS_NULL
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief 重置任务
|
||||
\param[in] sv 服务的结构体指针
|
||||
\return 无
|
||||
\note 关联服务:iResetTask(task, status)。
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _reset_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_taskctrl_tsp htask = ((sp_taskrst_tsp)sv)->htask;
|
||||
s_u8_t status = ((sp_taskrst_tsp)sv)->status;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_reset_task(htask, status);
|
||||
if(_ecode){
|
||||
s_psvfifo_ecode = _ecode;
|
||||
pResetTask_ErrorCallback(htask, status);
|
||||
}
|
||||
#else
|
||||
if(htask == OS_NULL) return;
|
||||
if(htask->status < OS_STATUS_DELETED){
|
||||
sa_reset_task(htask, status);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#else
|
||||
#define _reset_task_ OS_NULL
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief 清除阻塞(状态)
|
||||
\param[in] sv 服务的结构体指针
|
||||
@@ -138,7 +166,7 @@ static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_task_tsp)sv)->htask;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_clear_block(htask);
|
||||
if(_ecode){
|
||||
@@ -166,7 +194,7 @@ static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_blocktime_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_blocktime_tsp)sv)->htask;
|
||||
s_delay_t tick = ((sp_blocktime_tsp)sv)->tick;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_set_block(htask, tick);
|
||||
@@ -194,7 +222,7 @@ static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
#if 1 /* 编译开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
|
||||
static void _set_taskpri_(void _STATIC_MEM_ *sv) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_tasknode_tsp htask = ((sp_taskpri_tsp)sv)->htask;
|
||||
s_taskctrl_tsp htask = ((sp_taskpri_tsp)sv)->htask;
|
||||
s_u8_t npri = ((sp_taskpri_tsp)sv)->npri;
|
||||
#if (SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
s_ecode_t _ecode = sc_set_taskpri(htask, npri);
|
||||
@@ -421,6 +449,7 @@ void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STA
|
||||
_resume_task_,
|
||||
_suspend_task_,
|
||||
_delete_task_,
|
||||
_reset_task_,
|
||||
_clear_block_,
|
||||
_set_block_,
|
||||
_set_taskpri_,
|
||||
@@ -451,7 +480,7 @@ void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STA
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_resume_task_)
|
||||
__WEAK void pResumeTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pResumeTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
@@ -468,7 +497,7 @@ __WEAK void pResumeTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_suspend_task_)
|
||||
__WEAK void pSuspendTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pSuspendTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
@@ -485,7 +514,7 @@ __WEAK void pSuspendTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBU
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_delete_task_)
|
||||
__WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pDeleteTask_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
@@ -495,6 +524,25 @@ __WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief iResetTask(task, status) error callback
|
||||
\param[in] htask 任务句柄
|
||||
\param[in] status 任务初始状态
|
||||
\return 无
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_reset_task_)
|
||||
__WEAK void pResetTask_ErrorCallback(s_taskctrl_tsp htask, s_u8_t status) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
__UNUSED(status);
|
||||
/* NOTE: This function should not be modified, when the callback is needed,
|
||||
the pDeleteTask_ErrorCallback could be implemented in the user file
|
||||
*/
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief iClearBlock(task) error callback
|
||||
\param[in] htask 任务句柄
|
||||
@@ -502,7 +550,7 @@ __WEAK void pDeleteTask_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_clear_block_)
|
||||
__WEAK void pClearBlock_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pClearBlock_ErrorCallback(s_taskctrl_tsp htask) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
@@ -522,7 +570,7 @@ __WEAK void pClearBlock_ErrorCallback(s_tasknode_tsp htask) MCUCFG_OSIT_ATTRIBUT
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_set_block_)
|
||||
__WEAK void pSetBlock_ErrorCallback(s_tasknode_tsp htask, s_delay_t tick) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pSetBlock_ErrorCallback(s_taskctrl_tsp htask, s_delay_t tick) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
@@ -541,7 +589,7 @@ __WEAK void pSetBlock_ErrorCallback(s_tasknode_tsp htask, s_delay_t tick) MCUCFG
|
||||
*/
|
||||
#if 1 /* 编译开关 *//* 如果该函数在用户文件中实现且此处的弱定义无效,可手动移除该函数(1 改为 0)*/ \
|
||||
&& !defined (_set_taskpri_)
|
||||
__WEAK void pSetTaskPri_ErrorCallback(s_tasknode_tsp htask, s_u8_t npri) MCUCFG_OSIT_ATTRIBUTE
|
||||
__WEAK void pSetTaskPri_ErrorCallback(s_taskctrl_tsp htask, s_u8_t npri) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
/* Prevent unused argument(s) compilation warning */
|
||||
__UNUSED(htask);
|
||||
|
||||
+11
-3
@@ -4,8 +4,8 @@
|
||||
* @brief 中断FIFO服务-调用宏
|
||||
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_INT_FIFO_H
|
||||
@@ -56,6 +56,14 @@ do{ \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 重置任务 */
|
||||
#define sIPS_ResetTask(_htask, _status) \
|
||||
do{ \
|
||||
static sp_taskrst_ts u_psv = {OS_SVID_RESETTASK, OS_NULL, _status}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 清除阻塞(状态)*/
|
||||
#define sIPS_ClearBlock(_htask) \
|
||||
do{ \
|
||||
@@ -169,7 +177,7 @@ do{ \
|
||||
/** 设置时间 */
|
||||
#define sIPS_SetTime(_t) \
|
||||
do{ \
|
||||
static const m_rtccount_t _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||
static m_rtccount_t const _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||
iWriteGAry(&s_rtc, _t, sizeof(s_rtc)); \
|
||||
iWriteGVar(s_rtc_counter, _c); \
|
||||
}while(false)
|
||||
|
||||
+3
-3
@@ -4,8 +4,8 @@
|
||||
* @brief 中断本地服务
|
||||
* @details 在用户中断中调用并直接在本地执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.19
|
||||
* @version V2.4.1
|
||||
* @date 2026.06.24
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -66,7 +66,7 @@ void *si_recv_mail(s_mailbox_tsp hmbox)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_MSGQUEUE == __ENABLED__)
|
||||
#if (SYSCFG_MSGQUEUE == __ENABLED__) && (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
#if (SYSCFG_MCUCORE == 8051)
|
||||
/**
|
||||
\brief 获取队列互斥量
|
||||
|
||||
+11
-10
@@ -4,8 +4,8 @@
|
||||
* @brief PSV服务
|
||||
* @details 仅在 PendSV中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_PEND_H
|
||||
@@ -23,14 +23,15 @@
|
||||
@{
|
||||
*/
|
||||
|
||||
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
|
||||
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
|
||||
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sPSV_ResetTask(htask, status) sc_reset_task(htask, status)/*!< 重置任务 */
|
||||
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
|
||||
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
|
||||
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
+38
-24
File diff suppressed because it is too large
Load Diff
+20
-14
@@ -4,8 +4,8 @@
|
||||
* @brief 任务服务
|
||||
* @details 仅在任务中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.19
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_TASK_H
|
||||
@@ -31,9 +31,9 @@ void su_schedule_unlocks (void);
|
||||
void su_kernel_unlocks (void);
|
||||
void su_kernel_unlock0_psv(void);
|
||||
|
||||
s_ecode_t su_startup_task_0 (s_taskhand_tsp hhand, s_u8_t status);
|
||||
s_ecode_t su_startup_task_1 (s_taskhand_tsp hhand, s_u8_t status, s_voidvoid_tfp entry);
|
||||
s_ecode_t su_resume_suspend (s_tasknode_tsp htask);
|
||||
s_ecode_t su_startup_task_0 (s_taskload_tsp hload, s_u8_t status);
|
||||
s_ecode_t su_startup_task_1 (s_taskload_tsp hload, s_u8_t status, s_voidvoid_tfp entry);
|
||||
s_ecode_t su_resume_suspend (s_taskctrl_tsp htask);
|
||||
void su_yield_tasking (void);
|
||||
void su_delay (s_delay_t tick);
|
||||
bool su_take_mutex (s_mutex_tsp hmut, s_delay_t tick);
|
||||
@@ -44,11 +44,11 @@ bool su_take_semaph (s_semaph_tsp hsem, s_delay_t tick);
|
||||
m_fetion_t su_recv_fetion (s_tionbox_tsp htbox, s_delay_t tick);
|
||||
void *su_recv_mail (s_mailbox_tsp hmbox, s_delay_t tick);
|
||||
void *su_recv_msg (s_msgque_tsp hque, s_delay_t tick);
|
||||
bool su_recv_taskmsg (volatile s_u8_t _STATIC_MEM_ *tmrf, s_delay_t tick);
|
||||
bool su_wait_group_1 (volatile s_u8_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_2 (volatile s_u16_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_4 (volatile s_u32_t _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_query_group (volatile void _STATIC_MEM_ *hgrp, s_u8_t size);
|
||||
bool su_recv_taskmsg (s_u8_t volatile _STATIC_MEM_ *tmrf, s_delay_t tick);
|
||||
bool su_wait_group_1 (s_u8_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_2 (s_u16_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_4 (s_u32_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_query_group (void volatile _STATIC_MEM_ *hgrp, s_u8_t size);
|
||||
bool su_init_mempool (s_thrmem_tsp hmem, size_t size);
|
||||
void _MALLOC_MEM_ *su_talloc (s_thrmem_tsp hmem, size_t size);
|
||||
void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
|
||||
@@ -116,15 +116,15 @@ __STATIC_FORCEINLINE void *su_kernel_unlocks_rvp(void *p)
|
||||
*/
|
||||
|
||||
/** 启动任务 */
|
||||
#define sUSV_StartTask_0(hhand, status) \
|
||||
#define sUSV_StartTask_0(hload, status) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_0((s_taskhand_tsp)hhand, status) : OS_ECODE_NOERROR \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_0((s_taskload_tsp)hload, status) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 启动任务 */
|
||||
#define sUSV_StartTask_1(hhand, status, entry) \
|
||||
#define sUSV_StartTask_1(hload, status, entry) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_1((s_taskhand_tsp)hhand, status, (s_voidvoid_tfp)entry) : OS_ECODE_NOERROR \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_1((s_taskload_tsp)hload, status, (s_voidvoid_tfp)entry) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 恢复指定任务并挂起自身任务 */
|
||||
@@ -151,6 +151,12 @@ __STATIC_FORCEINLINE void *su_kernel_unlocks_rvp(void *p)
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_delete_task(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 重置任务 */
|
||||
#define sUSV_ResetTask(htask, status) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_reset_task(htask, status)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 清除阻塞(状态)*/
|
||||
#define sUSV_ClearBlock(htask) \
|
||||
( \
|
||||
|
||||
+7
-3
@@ -4,8 +4,8 @@
|
||||
* @brief 滴答服务
|
||||
* @details 仅在 SysTick中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.19
|
||||
* @version V2.4.1
|
||||
* @date 2026.06.24
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
@@ -26,7 +26,7 @@
|
||||
*/
|
||||
bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_semsize_t counter = hsem->counter;
|
||||
s_semaph_t counter = hsem->counter;
|
||||
if(counter){
|
||||
hsem->counter = counter - 1;
|
||||
return true;
|
||||
@@ -45,7 +45,9 @@ bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
||||
void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
void *msg = OS_NULL;
|
||||
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
hque->mutex = false;
|
||||
#endif
|
||||
|
||||
if(hque->counter){
|
||||
if(hque->type == __DYNAMIC__){
|
||||
@@ -56,7 +58,9 @@ void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
||||
}
|
||||
}
|
||||
|
||||
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
hque->mutex = true;
|
||||
#endif
|
||||
return msg;
|
||||
}
|
||||
#endif
|
||||
|
||||
+23
-22
@@ -4,8 +4,8 @@
|
||||
* @brief 滴答服务
|
||||
* @details 仅在 SysTick中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.19
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_TICK_H
|
||||
@@ -26,29 +26,30 @@ void *st_recv_msg (s_msgque_tsp hque);
|
||||
@{
|
||||
*/
|
||||
|
||||
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
|
||||
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
|
||||
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
|
||||
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
|
||||
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
|
||||
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
|
||||
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
|
||||
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
|
||||
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sTSV_ResetTask(htask, status) sc_reset_task(htask, status) /*!< 重置任务 */
|
||||
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
|
||||
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
|
||||
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
|
||||
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
|
||||
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
|
||||
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
|
||||
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
|
||||
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
|
||||
|
||||
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
|
||||
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
|
||||
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
|
||||
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
|
||||
|
||||
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
||||
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
||||
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||
|
||||
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
|
||||
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
|
||||
|
||||
/** 发送私信 */
|
||||
#define sTSV_SendTaskmsg(task) \
|
||||
|
||||
+154
-24
File diff suppressed because it is too large
Load Diff
+8
-2
@@ -5,8 +5,8 @@
|
||||
* @details 用户API的补充扩展定义,仅是定义无注释说明,所有内核服务的API说明
|
||||
均在 ur_api.h 中,并支持 doxygen。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.0
|
||||
* @date 2026.02.01
|
||||
* @version V2.3.7
|
||||
* @date 2026.06.13
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __UR_EAPI_H
|
||||
@@ -45,6 +45,12 @@
|
||||
#define pDeleteTask(task) sPSV_DeleteTask(task)
|
||||
#define iDeleteTask(task) sIPS_DeleteTask(task)
|
||||
|
||||
/* 重置任务 */
|
||||
//#define uResetTask(task, status) sUSV_ResetTask(task, status)
|
||||
#define tResetTask(task, status) sTSV_ResetTask(task, status)
|
||||
#define pResetTask(task, status) sPSV_ResetTask(task, status)
|
||||
#define iResetTask(task, status) sIPS_ResetTask(task, status)
|
||||
|
||||
/* 设置任务优先级 */
|
||||
//#define uSetTaskPri(task, npri) sUSV_SetTaskPri(task, npri)
|
||||
#define tSetTaskPri(task, npri) sTSV_SetTaskPri(task, npri)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 18 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
Reference in New Issue
Block a user