找回密码
 立即注册
查看: 6995|回复: 58

uC/OS-II@8H8K64U, 51核移植版本!杨教授:51核上激动人心的RTOS生态已具备

[复制链接]

30

主题

1022

回帖

2181

积分

荣誉版主

积分
2181
发表于 2024-5-6 21:22:46 | 显示全部楼层 |阅读模式
uC/OS-II@8H8K64U, 51核移植版本
杨教授点评:51核上激动人心的RTOS生态已初步具备
自研项目需要自带80mA大电流LED数码管自动刷新驱动的型号
8H4K32TL@RMB1.6.
截图202411192355368472.jpg
习惯了用uCOS做代码,又没找到合适的,于是就花了几天时间,自己移植了一个.
我看过的 uC/OS-II-51核 移植版都是采用了堆栈向上增长的模式.
而实际上,uC/OS管理的是xdata区的模拟栈.KeilC51模拟栈是向下增长的,
这导至了uC/OS-II的许多新特性不能用,比如:OSTaskCreateExt(), 堆栈检查等功能.
实际上,历史移植版本虽然用的是uC/OS-II的代码,却只实现了uC/OS-1的功能.

简介:
本移植版是完整的 uC/OS-II-51核 移植版, 并对51核的特殊性做了大量的优化.
此移植版本使用 "PendSv" 中断切换任务.

对比:
和以前移植版本相比较,一些新的特性描述如下:
1.支持用户选择 small 或 large 编译模式, small 和 large 模式可以共存.
2.OS切换上下文时,不关中断,中断可以快速响应.
3.中断里不再需要使用 OSIntNesting++和OSIntExit().符合中断快进快出原则,也符合使用习惯.

(特别说明: 是彻底消除了OSIntNesting, 连这个变量都删除了)
4.OS内核函数统一使用 small 编译模式,和用户选择无关,提高了效率.
5.无论是 small 或 large 都已经做了reentrant支持. 无须选择或配制.
6.完整的移植版本,uC/OS-II所有功能都可用.

测试:
例程已包含并通过了 "计数信号量, 消息邮箱, 标志集, 邮箱队列, 互斥信号量, 内存管理, 软件定时器,
任务上锁/解锁, 任务挂起/解挂, 获取OS时间, 统计任务, 堆栈检查,"  的简单功能测试.

移植版本于2024/5/4完成, 未经过长时间验证, 如果您将它用于项目, 请自行评估风险.


使用:
特别注意: os_cpu.h 中: #define  OS_STK_GROWTH   1  //定义栈的增长方向, 对应的是模拟栈, 向下增长
创建任务时注意:栈顶是 &TASK_STK[STK_SIZE-1] , 栈底是&TASK_STK[0] . 这时和以前的移植版本刚好反了一下,所以特别提醒!
调度器开启前不要打开EA, 启用调度器时会自动打开EA.
请严格遵守临界区配对使用的原则.

配制:
small 或 large 编译模式可以自由选择,其它项目配制请参照例程.
所有任务函数不要配制为可重入,并设置为调用树顶层,参照配制选项卡" LX51 Misc ".
OS采用一个硬件中断来模拟PendSv行为, 用于切换任务. PendSv占用一个中断源.
配制PendSv: 详情请转至 os_cfg.h  os_cpu.h  os_cpu_a.c
配制时钟源: 请转到 Config.h
OS已占用定时器0用作系统滴答,最低侁级.

关于选择编译模式:
推荐选择 large 模式,省事省心.
用large模式时,xdata管够. 所以:用户函数的非可重入方式, 效率也不比 small+reentrant 模式低多少.

可以选择 small 模式,但是全局变量和局部段会逐步吞噬掉DATA空间,需要引起注意.
一个有效的办法是全局变量显式指定存储类型, 同时用户函数也显式指定为 reentrant, 就不会有全局段和局部段侵占DATA空间的机会.
但有仍有两个潜在的风险:
1. small+reentrant 模式,可能会撑爆(idata)公共运行栈,所以如果你这么用,千万不要有很大尺寸的局部变量.
2. 库函数只认全局设置的属性,不能单独指定属性. 它可能成为侵占DATA的头号元凶.
(最终建议:代码量较大时还是不要选择 small 模式, 太麻烦!)

代码经过了三天的运行:
捕获.PNG


2024/7/8更新代码
uCOS-II_STC8H_small+large.rar (188.37 KB, 下载次数: 2115)











2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!

本帖被以下淘专辑推荐:

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-03-15 08:16:52

686

主题

1万

回帖

1万

积分

管理员

积分
14686
发表于 2024-5-6 21:38:40 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-03-15 08:16:52

686

主题

1万

回帖

1万

积分

管理员

积分
14686
发表于 2024-5-6 21:37:16 | 显示全部楼层
楼上大侠能否将STC32上曾经移植的:
GUI/uGFX, 文件系统,
也在STC8H上测试通过,一并放上来


STC8H系列数据手册下载

截图202405062137018663.jpg
深圳国芯人工智能有限公司-产品_STC8H系列 (stcai.com)

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-03-15 08:16:52

686

主题

1万

回帖

1万

积分

管理员

积分
14686
发表于 2024-5-6 21:42:05 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-03-15 10:06:40

1

主题

183

回帖

1683

积分

金牌会员

积分
1683
发表于 2024-5-7 08:14:45 | 显示全部楼层
{:5_332:},很强,下载学习。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:83
  • 最近打卡:2024-09-30 23:22:51

0

主题

118

回帖

248

积分

中级会员

积分
248
发表于 2024-5-7 08:54:07 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:459
  • 最近打卡:2025-03-15 10:06:40

1

主题

183

回帖

1683

积分

金牌会员

积分
1683
发表于 2024-5-7 09:45:39 | 显示全部楼层
“OS切换上下文时,不关中断,中断可以快速响应”,你这个特性,非常好,我也考虑一下,能不能实现,至少不要全程关中断。
回复 支持 反对

使用道具 举报 送花

30

主题

1022

回帖

2181

积分

荣誉版主

积分
2181
发表于 2024-5-7 09:53:05 | 显示全部楼层
本帖最后由 tzz1983 于 2024-5-7 09:54 编辑
fan*** 发表于 2024-5-7 09:45
“OS切换上下文时,不关中断,中断可以快速响应”,你这个特性,非常好,我也考虑一下,能不能实现,至少不要 ...

好的,相互学习哈, 我也在参照你的,比如说调用树, 我认为你这个理论比之前见过的处理方式更合理
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-12 19:44:27

94

主题

1132

回帖

1万

积分

荣誉版主

积分
12574
发表于 2024-5-7 10:29:48 | 显示全部楼层
我看了你的源程序,里面有好多值得推荐的、针对STC8H单片机与C51编译器的特色技术。

你的这个作品是开源的,允许我对它进行测试和专门发帖点评吗?

点评

可以的  详情 回复 发表于 2024-5-7 10:48
回复 支持 反对

使用道具 举报 送花

30

主题

1022

回帖

2181

积分

荣誉版主

积分
2181
发表于 2024-5-7 10:48:02 | 显示全部楼层
杨*** 发表于 2024-5-7 10:29
我看了你的源程序,里面有好多值得推荐的、针对STC8H单片机与C51编译器的特色技术。

你的这个作品是开源的 ...

可以的

点评

请本尊写个排行榜测试程序传上来,参加STC8H的排行榜  详情 回复 发表于 2024-5-8 00:46
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-3-15 12:59 , Processed in 0.127540 second(s), 121 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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