CosyOS 发表于 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还负责上下文切换。
实现了内核服务与用户代码空间隔离,服务与服务空间隔离。
再配合互斥访问指令可实现全局不关中断。



CosyOS

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

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

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

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


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


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



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





CosyOS 发表于 2023-5-19 14:44:59

杨为民 发表于 2023-5-19 10:37
这个“LED灯的测试程序”待我抽空看下怎么回事。。。

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

我今天抽空去看杨老师的大作,并好好学习一下。。。

杨为民 发表于 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单片机在软件上也迈上一个新台阶。


CosyOS 发表于 2023-5-19 21:59:33

杨为民 发表于 2023-5-19 20:31
(1)"Arm内核提供了两个异常(软中断),专门留给OS使用,SVC_Handler、PendSV_Handler",“在CosyOS中 ...

杨老师果然学识渊博{:4_250:}

CosyOS 发表于 2023-5-20 15:35:14

本帖最后由 CosyOS 于 2023-5-20 17:23 编辑

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



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


神农鼎 发表于 2023-5-20 16:00:40

希望 STC-ISP V6.91P版本的 【STC调试接口】在显示方面能帮上大家







CosyOS 发表于 2023-5-20 16:51:23

这个需要好好研究一下。

杨为民 发表于 2023-5-20 19:19:30

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

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

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

杨为民 发表于 2023-5-20 20:01:49

本帖最后由 杨为民 于 2023-5-20 20:09 编辑

CosyOS 发表于 2023-5-20 15:35
杨老师的大作我已拜读,测试程序设计的确实非常巧妙,LED灯犹如绚丽的彩霞缤纷多彩,在空中萦绕。
我已在杨 ...
(1)程序我已检查,少了定时器3的中断服务程序,加上后就正常工作了。

下图是补加的程序:


下面是运行效果的视频:


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



神农鼎 发表于 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
页: 1 2 [3] 4 5 6 7
查看完整版本: STC 原生RTOS PK 移植RTOS