找回密码
 立即注册
楼主: CosyOS

全局不关总中断的 RTOS,CosyOS-III-V1.2.0, 送 擎天柱-AI8051U转89C52核心板

 火... [复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-15 18:01:12

5

主题

1152

回帖

4473

积分

荣誉版主

积分
4473
发表于 2025-5-20 20:51:09 | 显示全部楼层
正是这个原因
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-15 18:01:12

5

主题

1152

回帖

4473

积分

荣誉版主

积分
4473
发表于 2025-5-20 21:36:02 | 显示全部楼层
CosyOS-III 最新动态

当前,CosyOS-III 最新版本为 V1.4.7,较早期版本已经取得了十足的进步,
下面挑一些要点做一下简单介绍:

1、解决了当嵌套获取多个互斥信号量时,可能会发生的优先级反转问题(该bug普遍存在于常见主流RTOS中)。
2、完善了对 Arm Compiler 5/6、GNU Compiler、IAR Compiler 等主流编译器的支持,并实现了良好的易用性。
3、优化了任务管理器CPU使用率相关算法,以后即使是在极端情况下,也不会出现某个任务或总的CPU使用率超过100%的情况。
4、推出了 实用例程 及 升级安装程序 CosyOS-III Cube.exe,可轻松将您的裸机工程升级为CosyOS工程。
QQ20250521-213613.png
以后,大家可以自己先创建一个基础工程(裸机工程),而后使用 CosyOS-III Cube 升级为 CosyOS工程。


CosyOS-III Cube 详细使用说明:

1、本程序仅适用于把一个非CosyOS工程升级为CosyOS工程。
2、CosyOS-源代码根文件夹,必须命名为 cosyos-master。
3、cosyos-master,可放置在工程文件所在分区的任意位置。
4、CosyOS-III Cube.exe,必须在 cosyos-master\Setup
   下运行,不可拷贝至其它位置运行。

如上述条件不能满足,请先退出安装,待重新调整好后再行安装!

5、目标文件夹必须选择工程文件所在目录,支持的工程文件名:
Keil C51、C251:*.uvproj
Keil MDK-Arm:*.uvprojx
IAR EWARM:*.ewp

6、在升级工程之前,安装程序会自动为用户备份原工程文件,并重新命名为
   your_project.*.bak,保存位置在原目录。

7、安装完成后,您还需进行系统配置(syscfg.h)、MCU配置(mcucfg_*.h)、
   编译器配置、堆栈配置等一系列的配置工作,再参照CosyOS例程进一步完成
   系统的构建,便可愉快的使用CosyOS了。



想试用的朋友请自行去 gitee 下载吧 。。。



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:345
  • 最近打卡:2025-06-15 11:58:42

0

主题

28

回帖

585

积分

高级会员

积分
585
发表于 2025-5-21 19:37:07 | 显示全部楼层
如图,两个报警是什么原因?
截图202505211933434988.jpg

点评

你把编译器配置好就不会有告警了。 [attachimg]101005[/attachimg] “生成全局可重入函数”打勾就好了。  详情 回复 发表于 2025-5-21 21:49
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-15 18:01:12

5

主题

1152

回帖

4473

积分

荣誉版主

积分
4473
发表于 2025-5-21 21:49:15 | 显示全部楼层
stc-x*** 发表于 2025-5-21 19:37
如图,两个报警是什么原因?

你把编译器配置好就不会有告警了。
QQ20250521-214643.png
“生成全局可重入函数”打勾就好了。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-15 18:01:12

5

主题

1152

回帖

4473

积分

荣誉版主

积分
4473
发表于 2025-5-21 22:28:33 | 显示全部楼层
CosyOS-III Cube.exe 新版发布,gitee上已更新。

新版实现了把支持图形用户界面的相关文件自动转码为 ANSI,又为用户省去了不少麻烦。
这个问题的根源是,在 Keil 下,启用文件的图形用户界面,如果文件内容有中文,编码必须
用ANSI,否则乱码;而 gitee 代码仓库上传的文件必须用 utf-8编码,如果上传的是ANSI,他
时常会自动转换为 utf-8。所以这件事就是会很麻烦。


想使用 CosyOS-III Cube 的用户需注意:
1、必须是一个 非CosyOS工程 才能升级为 CosyOS工程,如果已经是一个CosyOS工程了,不可以再升级。
2、用户必须使用从 gitee下载的原始代码进行升级安装。
3、如果CosyOS根文件夹的名称不是 cosyos-master,请自行改名为 cosyos-master。
4、拷贝 cosyos-master 至工程文件所在分区的任意位置(放到你想放的地方)。
5、进入 cosyos-master\Setup\,运行 CosyOS-III Cube.exe 进行升级安装。

截图202505221313136303.jpg 截图202505221315339401.jpg


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:28
  • 最近打卡:2025-06-16 08:46:53

0

主题

5

回帖

168

积分

注册会员

积分
168
发表于 2025-5-23 16:15:24 | 显示全部楼层
Yang.*** 发表于 2025-5-20 10:11
https://www.stcaimcu.com/forum.p ... tid=1807&pid=164755 参考这里,看看是不是设置了低功耗模式,ADC ...

感谢指点迷津
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-09 09:28:28

2

主题

56

回帖

540

积分

高级会员

积分
540
发表于 2025-5-23 16:57:48 | 显示全部楼层
宏扩展后看迷糊了,请作者给解释下吧?
_ecode = uStartTask_Ready(Sysidle);

扩展为:

#define uStartTask_Ready(Sysidle) \
        uStartTask(Sysidle, 0x00 )
               
#define uStartTask(Sysidle, 0x00) \   
    sUSV_StartTask(&u_taskhand_Sysidle, 0x00)
        
        
/** 启动任务 */        
#define sUSV_StartTask(&u_taskhand_Sysidle, 0x00) \
( \
        (*(s_boolvoid_tfp)(su_kernel_lock0))() || true ? su_startup_task((s_taskhand_tsp)&u_taskhand_Sysidle, !0x00 ? OS_STATUS_READY : OS_STATUS_SUSPENDED) : OS_ECODE_NOERROR \
)        
        
        
_ecode = (*(s_boolvoid_tfp)(su_kernel_lock0))()|| true ? su_startup_task((s_taskhand_tsp)&u_taskhand_Sysidle, !0x00 ? 0x00 : 0x08) : 0;
        
/** 内核上锁(进入非嵌套服务层临界区)*/
void su_kernel_lock0(void)
{
        mSysIRQ_Disable();
} 内核上锁返回值为空   (*(s_boolvoid_tfp)(su_kernel_lock0))()    这一句怎么理解?
        
(s_taskhand_tsp)&u_taskhand_Sysidle         这个是把指针强制转换为任务控制块指针吧?
        
&u_taskhand_Sysidle   这个是取u_taskhand_Sysidle的指针吧!        u_taskhand_Sysidle 在什么地方没找到?

麻烦作者给详细解释下吧!




点评

参见这里,原理是一样的: https://www.stcaimcu.com/thread-1807-95-1.html u_taskhand_Sysidle 是在创建 Sysidle 时定义的, uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname) 宏替换后就有了 s  详情 回复 发表于 2025-5-23 20:11
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-06-15 18:01:12

5

主题

1152

回帖

4473

积分

荣誉版主

积分
4473
发表于 2025-5-23 20:11:57 | 显示全部楼层
sdw*** 发表于 2025-5-23 16:57
宏扩展后看迷糊了,请作者给解释下吧?
_ecode = uStartTask_Ready(Sysidle);

参见这里,原理是一样的:
https://www.stcaimcu.com/thread-1807-95-1.html

u_taskhand_Sysidle 是在创建 Sysidle 时定义的,
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
宏替换后就有了

s_tasknode_ts u_taskhand_Sysidle;

s_tasknode_ts:这是控制块类型,所以

u_taskhand_Sysidle:是控制块。

s_taskhand_tsp:他是指向装载块的指针类型,
(s_taskhand_tsp)&u_taskhand_Sysidle:是把控制块指针转换为装载块指针,
启动任务时,一律使用装载块指针。


装载块,怎么回事?为什么要搞一个装载块?就需要你深入研究了,
要把任务的静态创建与动态创建结合到一起研究,
重点是先要看 os_redef.h,了解相关的类型定义,里面会有较详细的注释。




回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-09 09:28:28

2

主题

56

回帖

540

积分

高级会员

积分
540
发表于 2025-5-27 10:34:58 | 显示全部楼层
能详细介绍下PendSV在cosyos中的运行原理吗?他和Systisk之间是怎么协作的。最好能举例说明一下。

点评

你自己先研究一下,或看看以前的贴子,有相关说明,等我抽时间再做讲解  发表于 2025-5-28 18:36
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-06-09 09:28:28

2

主题

56

回帖

540

积分

高级会员

积分
540
发表于 2025-5-27 17:44:30 | 显示全部楼层
/**
\brief      任务节点(控制块)
\details    CosyOS 的 任务节点 即 任务控制块,包含了任务所需的全部关键信息。
             任务静态创建时,任务节点为静态;任务动态创建时,任务节点为动态。
*/
typedef struct s_tasknode_ts
{
    mTaskNode_Head_ /*!< MSP:stacklen,PSP:psp,MSP+PSP:psp */
                                            s_u8_t opri;         /*!< 任务创建时的优先级 */
                                     m_stacksize_t stacksize;    /*!< 任务栈size */
    struct s_tasknode_ts _OBJ_MEM_ * _STATIC_MEM_ *dualhandle;   /*!< 任务二重句柄:指向任务句柄的指针 */
                                    s_voidvoid_tfp entry;        /*!< 任务函数入口指针 */
    #if SYSCFG_DEBUGGING == __ENABLED__
                           const char _CONST_MEM_ *name;         /*!< 任务名称(字符串)*/
    #endif
    #if SYSCFG_SAFERUNTIME == __ENABLED__
                                           s_u16_t saferuntime;  /*!< 安全运行时设定值 */
    #endif
                                 s_u8_t _OBJ_MEM_ *bsp;          /*!< base stack pointer,任务栈的起始地址 */
                                            s_u8_t create;       /*!< 任务创建 [0:静态创建,1:动态创建未重分配,2:动态创建已重分配] */
                                            s_u8_t pri;          /*!< 任务当前优先级 */
                                            s_u8_t status;       /*!< 任务状态 */
                                            s_u8_t blocktype;    /*!< 阻塞类型 */
                                         s_delay_t timer;        /*!< 软件定时器(延时/超时计数)*/
                                void _STATIC_MEM_ *handle;       /*!< 内核对象句柄,仅指向静态对象 */
    #if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
                                       s_sharing_t tc_counter;   /*!< 滴答周期计数器 */
    #endif
    #if SYSCFG_DEBUGGING == __ENABLED__
                                           s_u32_t usedtime[2];  /*!< CPU 使用时间计数 */
                                     m_stacksize_t stacklen_max; /*!< 任务栈的实际占用在历史上的最大值 */
    #endif
    #if SYSCFG_SAFERUNTIME == __ENABLED__
                                           s_u32_t srt_counter;  /*!< 安全运行时计数器 */
    #endif
                   struct s_tasknode_ts _OBJ_MEM_ *last_b;       /*!< 上一节点 of 阻塞链表 */
                   struct s_tasknode_ts _OBJ_MEM_ *next_b;       /*!< 下一节点 of 阻塞链表 */
                   struct s_tasknode_ts _OBJ_MEM_ *next_t;       /*!< 下一节点 of 定时器/超时链表 */
    #if SYSCFG_SAMEPRISCHEDULE
                   struct s_tasknode_ts _OBJ_MEM_ *last;         /*!< 上一节点 of 优先级组 */
                   struct s_tasknode_ts _OBJ_MEM_ *next;         /*!< 下一节点 of 优先级组 */
    #endif
    mTaskNode_Tail_ /*!< MCS51/251:mUserReg_DEFc_,减栈:psp_top */
}s_tasknode_ts;
typedef s_tasknode_ts _OBJ_MEM_ *s_tasknode_tsp; /*!< 任务句柄 */


这个是任务控制块,如果我定义这样一个结构,在这个结构里边定义了6次 “struct s_tasknode_ts”相同结构,我可不可以理解为在这一个任务控制块里边包含了6个跟任务控制块相同的结构。





2025-05-28 09 15 01.png

点评

注意,在控制块结构体中,用 struct s_tasknode_ts 是在多次定义指针变量,而非实体。 这就是链表。。。  详情 回复 发表于 2025-5-28 18:43
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 16:45 , Processed in 0.165786 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表