mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-06 03:41:41 +08:00
28
System/CosyOS.H
Normal file
28
System/CosyOS.H
Normal file
@@ -0,0 +1,28 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file CosyOS.H
|
||||
* @brief 系统链接头文件
|
||||
* @details 用户的各个c文件中应包含此文件。
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __COSYOS_H
|
||||
#define __COSYOS_H
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_com.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "sv_tick.h"
|
||||
#include "sv_int_loc.h"
|
||||
#include "sv_int_pend_fifo.h"
|
||||
#include "sv_int_pend_flag.h"
|
||||
#include "ur_api.h"
|
||||
#include "ur_eapi.h"
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
204
System/os_api.h
Normal file
204
System/os_api.h
Normal file
@@ -0,0 +1,204 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_api.h
|
||||
* @brief 系统内核专用API
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_API_H
|
||||
#define __OS_API_H
|
||||
|
||||
void os_debug_recv(char *p, const size_t len);
|
||||
|
||||
/*
|
||||
* 引用.标准库函数
|
||||
*/
|
||||
|
||||
#define s_init_mempool init_mempool
|
||||
#define s_malloc malloc
|
||||
#define s_calloc calloc
|
||||
#define s_realloc realloc
|
||||
#define s_free free
|
||||
#define s_memcpy memcpy
|
||||
#define s_memcmp memcmp
|
||||
#define s_strcpy strcpy
|
||||
#define s_strcmp strcmp
|
||||
#define s_strlen strlen
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 操作.定时中断/查询
|
||||
*/
|
||||
|
||||
/** 启动定时中断任务 */
|
||||
#define sStartTask_TimInt(tmid) \
|
||||
sUSV_StartTask((s_taskhand_tsp)s_timint_handle[tmid]->hookorhand, OS_STATUS_SUSPENDED)
|
||||
|
||||
/** 启动定时查询任务 */
|
||||
#define sStartTask_TimQry(tmid) \
|
||||
sUSV_StartTask((s_taskhand_tsp)s_timqry_handle[tmid]->hookorhand, OS_STATUS_SUSPENDED)
|
||||
|
||||
/** 恢复定时中断任务 */
|
||||
#define sResumeTask_TimInt(tmid) \
|
||||
sTSV_ResumeTask(*((s_taskhand_tsp)s_timint_handle[tmid]->hookorhand)->dualhandle)
|
||||
|
||||
/** 恢复定时查询任务 */
|
||||
#define sResumeTask_TimQry(tmid) \
|
||||
sTSV_ResumeTask(*((s_taskhand_tsp)s_timqry_handle[tmid]->hookorhand)->dualhandle)
|
||||
|
||||
/** 调用定时中断钩子 */
|
||||
#define sCallHook_TimInt(tmid) \
|
||||
(*(s_voidvoid_tfp)s_timint_handle[tmid]->hookorhand)()
|
||||
|
||||
/** 调用定时查询钩子 */
|
||||
#define sCallHook_TimQry(tmid) \
|
||||
(*(s_voidvoid_tfp)s_timqry_handle[tmid]->hookorhand)()
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 更新.全局变量副本
|
||||
*/
|
||||
|
||||
#define sUpdateCopy(code) \
|
||||
do{ \
|
||||
s_sign_updatecopy = true; \
|
||||
code; \
|
||||
s_sign_updatecopy = false; \
|
||||
}while(false)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 事件标志组 - 写标志位
|
||||
*/
|
||||
|
||||
#define stWriteFlagBits_1(g, v, b0) \
|
||||
g.b0 = v
|
||||
|
||||
#define stWriteFlagBits_2(g, v, b0, b1) \
|
||||
g.b0 = g.b1 = v
|
||||
|
||||
#define stWriteFlagBits_3(g, v, b0, b1, b2) \
|
||||
g.b0 = g.b1 = g.b2 = v
|
||||
|
||||
#define stWriteFlagBits_4(g, v, b0, b1, b2, b3) \
|
||||
g.b0 = g.b1 = g.b2 = g.b3 = v
|
||||
|
||||
#define stWriteFlagBits_5(g, v, b0, b1, b2, b3, b4) \
|
||||
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = v
|
||||
|
||||
#define stWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5) \
|
||||
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = v
|
||||
|
||||
#define stWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6) \
|
||||
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = g.b6 = v
|
||||
|
||||
#define stWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7) \
|
||||
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = g.b6 = g.b7 = v
|
||||
|
||||
#define suWriteFlagBits_1(g, v, b0) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_1(g, v, b0); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_2(g, v, b0, b1) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_2(g, v, b0, b1); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_3(g, v, b0, b1, b2) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_3(g, v, b0, b1, b2); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_4(g, v, b0, b1, b2, b3) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_4(g, v, b0, b1, b2, b3); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_5(g, v, b0, b1, b2, b3, b4) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_5(g, v, b0, b1, b2, b3, b4); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define suWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
stWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
#define siWriteFlagBits_1(b0) \
|
||||
stWriteFlagBits_1(u_grp, true, b0); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_2(b0, b1) \
|
||||
stWriteFlagBits_2(u_grp, true, b0, b1); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_3(b0, b1, b2) \
|
||||
stWriteFlagBits_3(u_grp, true, b0, b1, b2); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_4(b0, b1, b2, b3) \
|
||||
stWriteFlagBits_4(u_grp, true, b0, b1, b2, b3); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_5(b0, b1, b2, b3, b4) \
|
||||
stWriteFlagBits_5(u_grp, true, b0, b1, b2, b3, b4); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_6(b0, b1, b2, b3, b4, b5) \
|
||||
stWriteFlagBits_6(u_grp, true, b0, b1, b2, b3, b4, b5); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_7(b0, b1, b2, b3, b4, b5, b6) \
|
||||
stWriteFlagBits_7(u_grp, true, b0, b1, b2, b3, b4, b5, b6); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits_8(b0, b1, b2, b3, b4, b5, b6, b7) \
|
||||
stWriteFlagBits_8(u_grp, true, b0, b1, b2, b3, b4, b5, b6, b7); \
|
||||
siWriteFlagBits()
|
||||
|
||||
#define siWriteFlagBits() \
|
||||
u_psv.value = ( \
|
||||
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp \
|
||||
: sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp \
|
||||
: sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp \
|
||||
: 0 \
|
||||
); \
|
||||
} \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
22
System/os_base.h
Normal file
22
System/os_base.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_base.h
|
||||
* @brief 基本数据类型定义
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_BASE_H
|
||||
#define __OS_BASE_H
|
||||
|
||||
typedef char s_s8_t;
|
||||
typedef short s_s16_t;
|
||||
typedef long s_s32_t;
|
||||
typedef unsigned char s_u8_t;
|
||||
typedef unsigned short s_u16_t;
|
||||
typedef unsigned long s_u32_t;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
130
System/os_debug.c
Normal file
130
System/os_debug.c
Normal file
@@ -0,0 +1,130 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_debug.c
|
||||
* @brief DEBUG接口
|
||||
* @details DEBUG接口,串口发送和接收解析。
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#if SYSCFG_DEBUGGING == __ENABLED__
|
||||
#include "os_api.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "ur_api.h"
|
||||
#include <string.h>
|
||||
|
||||
#if MCUCFG_ISA != __ARM__
|
||||
/**
|
||||
\brief 字符串转整型
|
||||
\param[in] str 字符串指针
|
||||
\return 转换后的整型数据
|
||||
\note Keil C51/C251 标准库中的 atoi() 是非线程安全的,故额外定义此函数,
|
||||
专用于DEBUG接口的串口接收解析。
|
||||
*/
|
||||
static int _atoi_(const char* str)
|
||||
{
|
||||
if(str == OS_NULL || !*str){
|
||||
return 0;
|
||||
}
|
||||
else{
|
||||
int a = 0;
|
||||
int k = 1;
|
||||
s_u8_t i = s_strlen(str);
|
||||
while(i--){
|
||||
if(str[i] >= '0' && str[i] <= '9'){
|
||||
a += (str[i] - '0') * k;
|
||||
k *= 10;
|
||||
}
|
||||
else if(str[i] == '+'){
|
||||
return a;
|
||||
}
|
||||
else if(str[i] == '-'){
|
||||
return -a;
|
||||
}
|
||||
else{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return a;
|
||||
}
|
||||
}
|
||||
#else
|
||||
#define _atoi_ atoi
|
||||
#endif
|
||||
|
||||
/**
|
||||
\brief 接收解析
|
||||
\details DEBUG接口,串口接收解析。
|
||||
\param[in] p 接收缓存的开始指针
|
||||
\param[in] len 接收数据包的长度
|
||||
\return 无
|
||||
*/
|
||||
void os_debug_recv(char *p, const size_t len)
|
||||
{
|
||||
p[len] = '\0';
|
||||
if(len == 9 && !s_strcmp(p, "taskmgr\r\n")){
|
||||
s_sign_taskmgr = true;
|
||||
}
|
||||
else if(len == 6 && !s_strcmp(p, "exit\r\n")){
|
||||
s_sign_taskmgr = false;
|
||||
}
|
||||
else if(len >= 15 && !s_memcmp(p, "taskmgr /s=", 11)){
|
||||
s_u8_t i;
|
||||
char *mptr = p + 11;
|
||||
for(i = 0; i < 5; i++){
|
||||
if(mptr[i] >= '0' && mptr[i] <= '9');
|
||||
else break;
|
||||
}
|
||||
if(i >= 2 && !s_strcmp(mptr + i, "\r\n")){
|
||||
s_u16_t temp;
|
||||
mptr[i] = '\0';
|
||||
temp = _atoi_(mptr);
|
||||
if(temp >= 50 && temp <= 5000){
|
||||
s_timqry_handle[OS_TMID_TASKMGR]->reload = (temp * 1000UL) / SYSCFG_SYSTICK_CYCLE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if MCUCFG_ISA == __ARM__
|
||||
#define _taskname "\xCF\xB5\xCD\xB3\xB5\xF7\xCA\xD4\xC6\xF7" /*!< "系统调试器" */
|
||||
#else
|
||||
#define _taskname 0
|
||||
#endif
|
||||
uCreateTask_TimQry
|
||||
(
|
||||
OS_TMID_DEBUGGER, s_debug_sendtype, false,
|
||||
Debugger, SYSCFG_TASKPRIORITY - 2, SYSCFG_STACKSIZE_DEBUGGER, 0, _taskname
|
||||
)
|
||||
{
|
||||
#if SYSCFG_DEBUG_SENDLEN == __DISABLED__
|
||||
void debug_hook(char *p);
|
||||
#else
|
||||
void debug_hook(char *p, size_t len);
|
||||
#endif
|
||||
while(true){
|
||||
if(s_debug_sendtype & OS_DEBUG_SEND_TASKMGR){
|
||||
s_debug_sendtype &= ~OS_DEBUG_SEND_TASKMGR;
|
||||
#if SYSCFG_DEBUG_SENDLEN == __DISABLED__
|
||||
debug_hook(s_taskmgr_sendbuff);
|
||||
#else
|
||||
debug_hook(s_taskmgr_sendbuff, s_taskmgr_sendlen);
|
||||
#endif
|
||||
}/*
|
||||
else if(s_debug_sendtype & OS_DEBUG_SEND_CMDLINE){
|
||||
s_debug_sendtype &= ~OS_DEBUG_SEND_CMDLINE;
|
||||
#if SYSCFG_DEBUG_SENDLEN == __DISABLED__
|
||||
debug_hook(s_cmdline_sendbuff);
|
||||
#else
|
||||
debug_hook(s_cmdline_sendbuff, s_cmdline_sendlen);
|
||||
#endif
|
||||
}*/
|
||||
uSuspendTasking();
|
||||
}
|
||||
}
|
||||
#undef _taskname
|
||||
|
||||
#endif
|
||||
129
System/os_def.h
Normal file
129
System/os_def.h
Normal file
@@ -0,0 +1,129 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_def.h
|
||||
* @brief 初始宏定义
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_DEF_H
|
||||
#define __OS_DEF_H
|
||||
|
||||
#define true 1
|
||||
#define false 0
|
||||
#define OS_NULL 0 /*!< 通用的空指针 */
|
||||
#define OS_VOID ((s_tasknode_tsp)~0) /*!< 专用的空指针,定时器/超时链表专用。*/
|
||||
|
||||
/*
|
||||
* CONFIG VALUE
|
||||
*/
|
||||
|
||||
#define __DISABLED__ 0
|
||||
#define __ENABLED__ 1
|
||||
#define __MSP__ 0 /*!< 任务栈模式:MSP模式 .. */
|
||||
#define __PSP__ 1 /*!< 任务栈模式:PSP模式 .. */
|
||||
#define __STATIC__ 0 /*!< 静态队列 ............. */
|
||||
#define __DYNAMIC__ 1 /*!< 动态队列 ............. */
|
||||
#define __QUE_FIFO__ 0 /*!< 先入先出队列 ......... */
|
||||
#define __QUE_LIFO__ 1 /*!< 后入先出队列 ......... */
|
||||
#define __MCS_51__ 0 /*!< 指令集架构:MCS51 .... */
|
||||
#define __MCS_251__ 1 /*!< 指令集架构:MCS251 ... */
|
||||
#define __ARM__ 2 /*!< 指令集架构:ARM ...... */
|
||||
#define __COOPERATIVE__ 1 /*!< 协作式调度............ */
|
||||
#define __TIMESHARING__ 2 /*!< 时间片轮转调度........ */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 任务相关
|
||||
*/
|
||||
|
||||
/* 任务状态 */
|
||||
#define OS_STATUS_READY 0x00 /*!< 就绪/运行状态 ............ */
|
||||
#define OS_STATUS_BLOCKED 0x02 /*!< 阻塞状态 ................. */
|
||||
#define OS_STATUS_TIMEOUT 0x04 /*!< 超时状态 ................. */
|
||||
#define OS_STATUS_SUSPENDED 0x08 /*!< 挂起状态 ................. */
|
||||
#define OS_STATUS_STOPPED 0x40 /*!< 停止状态 ................. */
|
||||
#define OS_STATUS_DELETED 0x80 /*!< 已删除/未启动状态 ........ */
|
||||
|
||||
/* 阻塞类型 */
|
||||
#define OS_BLOCKED_DELAY 0x00 /*!< 延时阻塞 ................. */
|
||||
/*- 0x01/0x02/0x04:sizeof(Group) -*//*!< 事件标志组阻塞(等待).... */
|
||||
#define OS_BLOCKED_BINARY 0x10 /*!< 二值信号量阻塞(获取/等待)*/
|
||||
#define OS_BLOCKED_MUTEX 0x20 /*!< 互斥信号量阻塞(获取).... */
|
||||
#define OS_BLOCKED_SEMAPHORE 0x30 /*!< 计数信号量阻塞(获取).... */
|
||||
#define OS_BLOCKED_FETION 0x40 /*!< 接收飞信阻塞 ............. */
|
||||
#define OS_BLOCKED_MAIL 0x50 /*!< 接收邮件阻塞 ............. */
|
||||
#define OS_BLOCKED_MSG 0x60 /*!< 接收消息阻塞 ............. */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* DEBUG SEND TYPE
|
||||
*/
|
||||
|
||||
#define OS_DEBUG_SEND_CMDLINE 0x01 /*!< 命令行发送 ... */
|
||||
#define OS_DEBUG_SEND_TASKMGR 0x02 /*!< 任务管理器发送 */
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* TASKMGR LEN
|
||||
*/
|
||||
|
||||
#define OS_TASKMGR_LEN_PRI 6
|
||||
#define OS_TASKMGR_LEN_STA 6
|
||||
#define OS_TASKMGR_LEN_CPU 9
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 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_TIMINT 0x07
|
||||
#define OS_SVID_TIMQRY 0x08
|
||||
#define OS_SVID_BINARY 0x09
|
||||
#define OS_SVID_GIVESEM 0x0A
|
||||
#define OS_SVID_SENDFETION 0x0B
|
||||
#define OS_SVID_SENDMAIL 0x0C
|
||||
#define OS_SVID_SENDMSG 0x0D
|
||||
#define OS_SVID_GROUP 0x0E
|
||||
#define OS_SVID_GVARWRITE 0x0F
|
||||
#define OS_SVID_PENDSVC 0x10
|
||||
#define OS_SVID_SENDSIGN 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 /*!< 未知错误 ........... */
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
698
System/os_handler.c
Normal file
698
System/os_handler.c
Normal file
File diff suppressed because it is too large
Load Diff
38
System/os_main.c
Normal file
38
System/os_main.c
Normal file
@@ -0,0 +1,38 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_main.c
|
||||
* @brief 主函数
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "ur_api.h"
|
||||
|
||||
/**
|
||||
\brief 启动-CosyOS
|
||||
\param 无
|
||||
\return 错误码
|
||||
\note 用户应自主创建main函数,并在其末尾处调用该函数来启动-CosyOS;
|
||||
在正常情况下,该函数并不会返回,而是直接调度至 Starter 运行;
|
||||
只有在 Sysidle / Starter 启动失败时,才会返回错误码提示用户。
|
||||
*/
|
||||
s_ecode_t uStartCosyOS(void)
|
||||
{
|
||||
s_ecode_t _ecode;
|
||||
uExternTask(Sysidle);
|
||||
sCat2Str(SYSCFG_STARTERCREATE, ExternTask(Starter));
|
||||
#if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
|
||||
void os_init_timing(void);
|
||||
os_init_timing();
|
||||
#endif
|
||||
mCosyOS_INIT();
|
||||
_ecode = uStartTask_Ready(Sysidle);
|
||||
if(_ecode) return _ecode;
|
||||
_ecode = uStartTask_Ready(Starter);
|
||||
return _ecode;
|
||||
}
|
||||
736
System/os_redef.h
Normal file
736
System/os_redef.h
Normal file
File diff suppressed because it is too large
Load Diff
50
System/os_starter.c
Normal file
50
System/os_starter.c
Normal file
@@ -0,0 +1,50 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_starter.c
|
||||
* @brief 任务启动器(Starter)
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "ur_api.h"
|
||||
|
||||
#if MCUCFG_ISA == __ARM__
|
||||
#define _taskname "\xC8\xCE\xCE\xF1\xC6\xF4\xB6\xAF\xC6\xF7" /*!< "任务启动器" */
|
||||
#else
|
||||
#define _taskname 0
|
||||
#endif
|
||||
sCat2Str
|
||||
(
|
||||
SYSCFG_STARTERCREATE,
|
||||
CreateTask(Starter, SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 4 : 2), SYSCFG_STACKSIZE_STARTER, 0, _taskname)
|
||||
)
|
||||
{
|
||||
void start_hook(void);
|
||||
#if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
|
||||
s_u8_t i;
|
||||
#if OS_TIMINTTOTAL
|
||||
i = OS_TIMINTTOTAL;
|
||||
while(i--){
|
||||
if(s_timint_handle[i]->hookortask){
|
||||
sStartTask_TimInt(i);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if OS_TIMQRYTOTAL
|
||||
i = OS_TIMQRYTOTAL;
|
||||
while(i--){
|
||||
if(s_timqry_handle[i]->hookortask){
|
||||
sStartTask_TimQry(i);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
start_hook();
|
||||
uDeleteTasking();
|
||||
}
|
||||
#undef _taskname
|
||||
44
System/os_sysidle.c
Normal file
44
System/os_sysidle.c
Normal file
@@ -0,0 +1,44 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_sysidle.c
|
||||
* @brief 系统空闲任务(Sysidle)
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_task.h"
|
||||
#include "ur_api.h"
|
||||
|
||||
#if MCUCFG_ISA == __ARM__
|
||||
#define _taskname "\xCF\xB5\xCD\xB3\xBF\xD5\xCF\xD0" /*!< "系统空闲" */
|
||||
#else
|
||||
#define _taskname 0
|
||||
#endif
|
||||
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
|
||||
{
|
||||
void idle_hook(void);
|
||||
while(true){
|
||||
#if SYSCFG_SOFTRTC == __ENABLED__
|
||||
static s_u8_t _RTC_MEM_ year = 0xFF;
|
||||
if(year != s_rtc.year){
|
||||
year = s_rtc.year;
|
||||
s_month2day = year ? ((year & 3) ? 28 : 29) : ((s_rtc.yeah & 3) ? 28 : 29);
|
||||
}
|
||||
#endif
|
||||
#if SYSCFG_SAFERUNTIME == __ENABLED__
|
||||
s_sign_timeout = false;
|
||||
#endif
|
||||
#if SYSCFG_IDLEHOOK == __ENABLED__
|
||||
idle_hook();
|
||||
#endif
|
||||
#if SYSCFG_LOWPOWERMODE == __ENABLED__
|
||||
mCosyOS_IDLE();
|
||||
#endif
|
||||
OS_NOP(2);
|
||||
}
|
||||
}
|
||||
#undef _taskname
|
||||
600
System/os_taskmgr.c
Normal file
600
System/os_taskmgr.c
Normal file
File diff suppressed because it is too large
Load Diff
817
System/os_timing.c
Normal file
817
System/os_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
129
System/os_var.c
Normal file
129
System/os_var.c
Normal file
@@ -0,0 +1,129 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_var.c
|
||||
* @brief 系统全局变量定义
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#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; /*!< 二月有几天?*/
|
||||
volatile s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
|
||||
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC正本 */
|
||||
#if SYSCFG_GETRTC_INT == __ENABLED__
|
||||
s_rtc_ts _RTC_MEM_ s_rtc_copy = {SYSCFG_MANUFACTUREDATE}; /*!< RTC副本 */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_rtc/**/sZeroInstall; /*!< 更新RTC副本信号 */
|
||||
#endif
|
||||
#endif
|
||||
/* The Task */
|
||||
volatile s_schesign_tu _SYS_MEM_ s_sign_schedule = {0, 1}; /*!< 调度信号 */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_ready_delay/**/sZeroInstall; /*!< 就绪延时信号 */
|
||||
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
|
||||
s_ecode_t _SYS_MEM_ s_startup_code = 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 _SYS_MEM_ s_list_timer = OS_VOID; /*!< 定时器链表 */
|
||||
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
|
||||
#if SYSCFG_TIMESHARINGMODE == 2
|
||||
const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
|
||||
#endif
|
||||
#endif
|
||||
#if SYSCFG_KERNELLOCKNESTING == __ENABLED__
|
||||
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
|
||||
#endif
|
||||
/* The Safe runtime */
|
||||
#if SYSCFG_SAFERUNTIME == __ENABLED__
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_timeout/**/sZeroInstall; /*!< 超时信号 */
|
||||
s_tasknode_tsp _SYS_MEM_ s_list_timeout = OS_VOID; /*!< 超时链表 */
|
||||
#endif
|
||||
/* The Timing Interrupt */
|
||||
#if OS_TIMINTTOTAL
|
||||
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
|
||||
#endif
|
||||
/* The Timing Query */
|
||||
#if OS_TIMQRYTOTAL
|
||||
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
|
||||
#endif
|
||||
/* The Global Variable Accessor */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy/**/sZeroInstall; /*!< 更新副本信号 */
|
||||
/* The Debug Interface */
|
||||
#if SYSCFG_DEBUGGING == __ENABLED__
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_taskmgr = SYSCFG_TASKMGR_AUTOSTART;
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_debugsend/**/sZeroInstall;
|
||||
volatile s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;/*
|
||||
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
#if SYSCFG_DEBUG_SENDLEN == __ENABLED__
|
||||
size_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
#endif*/
|
||||
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
#if SYSCFG_DEBUG_SENDLEN == __ENABLED__
|
||||
size_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
#endif
|
||||
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;
|
||||
#endif
|
||||
#if SYSCFG_TASKPC_MONITOR == __ENABLED__
|
||||
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
|
||||
#endif
|
||||
#if SYSCFG_RUNTIME_COUNT == __ENABLED__
|
||||
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task bitmap */
|
||||
const s_u8_t _CONST_MEM_ s_task_map_mask[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
|
||||
const s_u8_t _CONST_MEM_ s_task_map_pick[SYSCFG_TASKPICKBITMAP * 128] =
|
||||
{
|
||||
#if SYSCFG_TASKPICKBITMAP == 1
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
|
||||
/* 0 */ 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
/* 1 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
/* 2 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 3 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 4 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* 5 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* 6 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* 7 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
||||
#elif SYSCFG_TASKPICKBITMAP == 2
|
||||
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
|
||||
/* 0 */~0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
/* 1 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
/* 2 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
/* 3 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
/* 4 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 5 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 6 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 7 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
/* 8 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* 9 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* A */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* B */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* C */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* D */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* E */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
/* F */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
||||
#endif
|
||||
};
|
||||
#if SYSCFG_TASKPRIORITY > 64
|
||||
s_u8_t _SYS_MEM_ s_task_table_index/**/sZeroInstall; /*!< 表索引 */
|
||||
s_u8_t _SYS_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)]/**/sZeroInstall_Group;
|
||||
s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8]/**/sZeroInstall_Group;
|
||||
#elif SYSCFG_TASKPRIORITY > 8
|
||||
s_u8_t _SYS_MEM_ s_task_bytes_index/**/sZeroInstall; /*!< 字节索引 */
|
||||
s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)]/**/sZeroInstall_Group;
|
||||
#else
|
||||
s_u8_t _SYS_MEM_ s_task_ready_table/**/sZeroInstall; /*!< 任务就绪表 */
|
||||
#endif
|
||||
s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
|
||||
s_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
|
||||
#if SYSCFG_SAMEPRISCHEDULE
|
||||
s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group;
|
||||
#endif
|
||||
104
System/os_var.h
Normal file
104
System/os_var.h
Normal file
@@ -0,0 +1,104 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_var.h
|
||||
* @brief 系统全局变量声明
|
||||
* @author 迟凯峰
|
||||
* @version V1.2.0
|
||||
* @date 2025.03.30
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_VAR_H
|
||||
#define __OS_VAR_H
|
||||
#include "os_redef.h"
|
||||
|
||||
/* 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 volatile s_every_ts _SYS_MEM_ s_sign_every;
|
||||
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
||||
#if SYSCFG_GETRTC_INT == __ENABLED__
|
||||
extern s_rtc_ts _RTC_MEM_ s_rtc_copy;
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_rtc;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task */
|
||||
extern volatile s_schesign_tu _SYS_MEM_ s_sign_schedule;
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_ready_delay;
|
||||
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
||||
extern s_ecode_t _SYS_MEM_ s_startup_code;
|
||||
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 _SYS_MEM_ s_list_timer;
|
||||
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
|
||||
#if SYSCFG_TIMESHARINGMODE == 2
|
||||
extern const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
||||
#endif
|
||||
#endif
|
||||
#if SYSCFG_KERNELLOCKNESTING == __ENABLED__
|
||||
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
||||
#endif
|
||||
/* The Safe runtime */
|
||||
#if SYSCFG_SAFERUNTIME == __ENABLED__
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_timeout;
|
||||
extern s_tasknode_tsp _SYS_MEM_ s_list_timeout;
|
||||
#endif
|
||||
/* The Timing Interrupt */
|
||||
#if OS_TIMINTTOTAL
|
||||
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
||||
#endif
|
||||
/* The Timing Query */
|
||||
#if OS_TIMQRYTOTAL
|
||||
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
||||
#endif
|
||||
/* The Global Variable Accessor */
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy;
|
||||
/* The Debug Interface */
|
||||
#if SYSCFG_DEBUGGING == __ENABLED__
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_taskmgr;
|
||||
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_debugsend;
|
||||
extern volatile s_u8_t _SYS_MEM_ s_debug_sendtype;/*
|
||||
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
#if SYSCFG_DEBUG_SENDLEN == __ENABLED__
|
||||
extern size_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
#endif*/
|
||||
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
#if SYSCFG_DEBUG_SENDLEN == __ENABLED__
|
||||
extern size_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
#endif
|
||||
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;
|
||||
#endif
|
||||
#if SYSCFG_TASKPC_MONITOR == __ENABLED__
|
||||
extern m_pc_t _SYS_MEM_ s_pc;
|
||||
#endif
|
||||
#if SYSCFG_RUNTIME_COUNT == __ENABLED__
|
||||
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task bitmap */
|
||||
extern const s_u8_t _CONST_MEM_ s_task_map_mask[8];
|
||||
extern const s_u8_t _CONST_MEM_ s_task_map_pick[SYSCFG_TASKPICKBITMAP * 128];
|
||||
#if SYSCFG_TASKPRIORITY > 64
|
||||
extern s_u8_t _SYS_MEM_ s_task_table_index;
|
||||
extern s_u8_t _SYS_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)];
|
||||
extern s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8];
|
||||
#elif SYSCFG_TASKPRIORITY > 8
|
||||
extern s_u8_t _SYS_MEM_ s_task_bytes_index;
|
||||
extern s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)];
|
||||
#else
|
||||
extern s_u8_t _SYS_MEM_ s_task_ready_table;
|
||||
#endif
|
||||
extern s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
||||
extern s_tqcount_t _QUE_MEM_ s_task_queue_count;
|
||||
#if SYSCFG_SAMEPRISCHEDULE
|
||||
extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
|
||||
#endif
|
||||
|
||||
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user