找回密码
 立即注册
楼主: Cos***

STC 原生RTOS PK 移植RTOS

[复制链接]
  • TA的每日心情
    奋斗
    昨天 15:35
  • 签到天数: 155 天

    [LV.7]常住居民III

    5

    主题

    475

    回帖

    2076

    积分

    荣誉版主

    积分
    2076
     楼主| 发表于 2023-5-19 14:36:21 | 显示全部楼层
    本帖最后由 CosyOS 于 2023-5-19 14:46 编辑

    CosyOS的基本设计思想源于Arm内核对操作系统的优化设计,方法上与keil RTX4/5非常相似,但又有不同。
    Arm内核提供了两个异常(软中断),专门留给OS使用,SVC_Handler、PendSV_Handler。


    Keil RTX4/5

    在Keil RTX中,SysTick、PendSV均为最低优先级,SVC比他们高一级。
    任务中调用服务:通过调用SVC来间接执行服务。
    中断中调用服务:先注册到OSFIFO,再触发PendSV来间接执行服务。PendSV还负责上下文切换。
    实现了内核服务与用户代码空间隔离,服务与服务空间隔离。
    再配合互斥访问指令[STREX/LDREX]可实现全局不关中断。



    CosyOS

    在CosyOS中,有两个系统中断,SysTick、PendSV/其它替代中断,均为最低优先级。
    任务中调用服务通过进入任务临界区实现,并未采用调用SVC的方法。
    进入任务临界区:
    8051/251内核:关闭上述两个系统中断;
    Arm内核:屏蔽最低优先级的中断。

    任务中调用服务
    同步服务:进入任务临界区 → 本地执行服务 → 退出任务临界区
    异步服务:进入任务临界区 → 服务入任务节点 → 触发任务调度 → 退出任务临界区

    中断中调用服务

    同步服务:本地执行服务
    异步服务:
    Arm内核:服务入[ISS] → 触发PendSV
    8051/251内核:服务入[ISS] → 设置中断服务标志 → 触发PendSV

    PendSV_Handler
    中断异步服务的执行
    任务异步服务的执行
    任务调度与切换


    中断中支持对任务的恢复、挂起、删除、设置优先级等服务,都属于中断异步服务,会在PendSV中统一执行服务,而后再任务调度与切换。
    即使是中断嵌套也丝毫不受影响。


    “中断服务任务”
    在中断中应遵循快进快出的原则,仅执行最为紧急的工作,而把不太紧急的工作转为在任务中执行(中断服务任务)。
    “中断服务任务”的实现方法:任务平时为挂起状态,在中断中恢复这个任务的运行,任务运行结束后再挂起自身。



    以上,我只是做个简单介绍,关于这方面的陈述,在以前的帖子中做过详细介绍,所以不再详述。
    感兴趣的朋友请参考:
    CosyOS - 全局不关中断特性的详细说明
    https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1807&extra=page%3D1&page=5





    点评

    (1)"Arm内核提供了两个异常(软中断),专门留给OS使用,SVC_Handler、PendSV_Handler",“在CosyOS中,有两个系统中断,SysTick、PendSV/其它替代中断,均为最低优先级。任务中调用服务通过进入任务临界区实现,  详情 回复 发表于 2023-5-19 20:31
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:35
  • 签到天数: 155 天

    [LV.7]常住居民III

    5

    主题

    475

    回帖

    2076

    积分

    荣誉版主

    积分
    2076
     楼主| 发表于 2023-5-19 14:44:59 | 显示全部楼层
    杨为民 发表于 2023-5-19 10:37
    这个“LED灯的测试程序”待我抽空看下怎么回事。。。

    我看到了很多小板凳,不知道第2局的PK你准备的怎么 ...

    我今天抽空去看杨老师的大作,并好好学习一下。。。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10816
    发表于 2023-5-19 20:31:27 | 显示全部楼层
    CosyOS 发表于 2023-5-19 14:36
    CosyOS的基本设计思想源于Arm内核对操作系统的优化设计,方法上与keil RTX4/5非常相似,但又有不同。
    Arm内 ...

    (1)"Arm内核提供了两个异常(软中断),专门留给OS使用,SVC_Handler、PendSV_Handler",“在CosyOS中,有两个系统中断,SysTick、PendSV/其它替代中断,均为最低优先级。任务中调用服务通过进入任务临界区实现,并未采用调用SVC的方法。

    点评:ARM系列、80x86系列等CPU都有专门用于操作系统的“软中断”,而像8051单片机与目前的STC32G/F系列的单片机没有专门的软中断,因此CosyOS采用两个系统中断来代替,对于STC8H系列的单片机永远是唯一正确的选择。对于目前的STC32G/F系列的单片机也是唯一正确的选择。


    (2)笔者在30多年前一直使用PDP-11/23计算机(做CCD图像采集和望远镜控制)和PDP-11/73计算机(做图像和数据处理)。PDP-11系列计算机的CPU指令集中有一条软中断指令“TRAP”,该指令在指定的矢量位置产生一个中断(硬件将返回地址与PSW推人堆栈),用户程序使用“RETI”指令返回(硬件读回PSW和返回被调用的地址)。
    PDP-11系列计算机上有两个RTOS操作系统,一个DEC公司官方的“RT-11实时多任务操作系统(另外“RSX-11是它的分时多用户磁盘操作系统),另一个是FORTH语言鼻祖写的“Stand-Alone Forth-11”单机FORTH实时多任务操作系统。出于工作的需要,笔者全文阅读和研究了这两个RTOS的全部汇编语言程序,并指导学生将FORTH的部分核心移植到了IBM-PC/AT上。


    (3)Intel的80251规范中特别为操作系统设计了“TRAP”指令(见STC32G指令集详解,机器码 B9H),目前该指令只是内部作为STC32G/F单片机的测试和仿真使用(猜测),没有开放给用户(在中断矢量表的中断号里有空位)。建议STC官方开放这个软中断给用户使用,这样近期就可以使像CosyOS这样的RTOS直接使用该中断,大大提高其实时响应能力,远期就可以像树莓派一样,允许运行某种真正的操作系统,在系统级别实现临界区保护和实时多任务调度,使STC32位8051单片机在软件上也迈上一个新台阶。


    点评

    杨老师果然学识渊博  详情 回复 发表于 2023-5-19 21:59
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:35
  • 签到天数: 155 天

    [LV.7]常住居民III

    5

    主题

    475

    回帖

    2076

    积分

    荣誉版主

    积分
    2076
     楼主| 发表于 2023-5-19 21:59:33 | 显示全部楼层
    杨为民 发表于 2023-5-19 20:31
    (1)"Arm内核提供了两个异常(软中断),专门留给OS使用,SVC_Handler、PendSV_Handler",“在CosyOS中 ...

    杨老师果然学识渊博
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:35
  • 签到天数: 155 天

    [LV.7]常住居民III

    5

    主题

    475

    回帖

    2076

    积分

    荣誉版主

    积分
    2076
     楼主| 发表于 2023-5-20 15:35:14 | 显示全部楼层
    本帖最后由 CosyOS 于 2023-5-20 17:23 编辑

    杨老师的大作我已拜读,测试程序设计的确实非常巧妙,LED灯犹如绚丽的彩霞缤纷多彩,在空中萦绕。
    我已在杨老师测试程序的基础上,把uC/OS-II 替换成了 CosyOS最新版,由于手中没有合适的板子,所以还未测试。

    现发布第一版测试程序,供大家参考。

    04_CosyOS_基础测试程序_V1.0.0.rar (822.28 KB, 下载次数: 26)

    软件延时一定是需要重新调整的,才能准确(本人未做调整)。
    软件延时函数在 init_hook.c。


    点评

    程序我已检查,少了定时器3的中断服务程序,加上后就正常工作了。 下图是补加的程序:  详情 回复 发表于 2023-5-20 20:01
    (1)祝贺,这是广大学习者的福音,也是我学习CosyOS的起点。从教学的角度讲,介绍一个新的系统,越简单的程序例子越好,就像C语言的第1课是“Hello,world”一样。 (2)范例我用打狗棒开发板测了,LOGO之后没有动  详情 回复 发表于 2023-5-20 19:19
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13946
    发表于 2023-5-20 16:00:40 | 显示全部楼层
    希望 STC-ISP V6.91P版本的 【STC调试接口】在显示方面能帮上大家
    1.png

    2.png
    3.png



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 15:35
  • 签到天数: 155 天

    [LV.7]常住居民III

    5

    主题

    475

    回帖

    2076

    积分

    荣誉版主

    积分
    2076
     楼主| 发表于 2023-5-20 16:51:23 | 显示全部楼层
    这个需要好好研究一下。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10816
    发表于 2023-5-20 19:19:30 | 显示全部楼层
    CosyOS 发表于 2023-5-20 15:35
    杨老师的大作我已拜读,测试程序设计的确实非常巧妙,LED灯犹如绚丽的彩霞缤纷多彩,在空中萦绕。
    我已在杨 ...

    (1)祝贺,这是广大学习者的福音,也是我学习CosyOS的起点。从教学的角度讲,介绍一个新的系统,越简单的程序例子越好,就像C语言的第1课是“Hello,world”一样。

    (2)范例我用打狗棒开发板测了,LOGO之后没有动静,似乎是中断没有启动,请检查下
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10816
    发表于 2023-5-20 20:01:49 | 显示全部楼层
    本帖最后由 杨为民 于 2023-5-20 20:09 编辑
    CosyOS 发表于 2023-5-20 15:35
    杨老师的大作我已拜读,测试程序设计的确实非常巧妙,LED灯犹如绚丽的彩霞缤纷多彩,在空中萦绕。
    我已在杨 ...

    (1)程序我已检查,少了定时器3的中断服务程序,加上后就正常工作了。

    下图是补加的程序:
    04_CosyOS_基础测试程序.jpg

    下面是运行效果的视频:


    (2)下图是uC/OS-II程序的编译结果,从编译产生的data、xdata和code规模可以看出两者技术路线的特点
    uCOSII.jpg


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    550

    主题

    9235

    回帖

    1万

    积分

    管理员

    积分
    13946
    发表于 2023-5-20 21:08:11 | 显示全部楼层
    CosyOS:   data = 249, xdata = 1665, code = 16019
    uCOS-II:  data = 75,   xdata = 4026, code = 10767
    =====  ?????  ========================================
    现在 FLASH 不要钱啊,edata 现在 32位8051,配置至少 1K/2K/4K,再大成本太高
    现在 FLASH 不要钱啊,idata  现在  1T 8051, 只有256

    xdata 成本和普通SRAM成本是一样的
    后续 STC8051H-45MHz-LQFP48/LQFP44/PDIP40, 管脚兼容 STC89C52RC/STC12C5A60S2
    32位8051,edata = 2k, xdata = 16k, Flash = 64k, USB / DMA /12-BIT ADC, RMB3
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-30 04:49 , Processed in 0.070832 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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