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

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

 火... [复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-8-3 13:05:49 | 显示全部楼层
本帖最后由 CosyOS 于 2023-8-3 13:13 编辑
熊*** 发表于 2023-8-3 12:33
我认为全部使用using 0,其实不差几个指令周期。中断寄存器组0 全部入栈,绝对地址访问,速度杠杆的,也就8 ...

中断使用using后,寄存器库不用入出栈,在绝对寄存器访问时,少了8条PUSH,8条POP,共16条指令,还是会有明显提速。
当然,中断不使用using也是可以的(全局都使用BANK 0),BANK 1、2、3还可用做data定义变量,用户也不必考虑using的使用原则和“相对寄存器访问”等问题,也不用担心会出错。
所以,中断是否使用using,可以说是各有千秋,根据自己的情况和喜好选择就可以了。

但如果使用了using,就要注意我提到的“using的使用原则”和“相对寄存器访问”的问题了。

点评

你说了这只是你的个人观点,那么别人为什么要认可你的观点与你讨论呢?因此你应该先说明你这个观点的合理性。比如这句话“中断使用using后,寄存器库不用入出栈,在绝对寄存器访问时,少了8条PUSH,8条POP,共16条指  详情 回复 发表于 2023-8-3 13:27
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-8-3 13:27:37 | 显示全部楼层
Cos*** 发表于 2023-8-3 13:05
中断使用using后,寄存器库不用入出栈,在绝对寄存器访问时,少了8条PUSH,8条POP,共16条指令,还是会有 ...

你说了这只是你的个人观点,那么别人为什么要认可你的观点与你讨论呢?因此你应该先说明你这个观点的合理性。比如这句话“中断使用using后,寄存器库不用入出栈,在绝对寄存器访问时,少了8条PUSH,8条POP,共16条指令,还是会有明显提速。”,你要么给出你的理论依据,比如什么手册上说啦,或者你引用别人的观点啦。要么你给出你的实践依据,比如说你的实际的程序和结果。
你的这个断言很让我这个老程序员吃惊,所以你还是要先说明你的依据,如果大家认可了你的这个断言,你再用这个断言去与别人讨论,否则都是空谈,大家也没有什么收获

点评

我说的关于using的使用原则和寄存器访问的问题,是为了提供给有需要的或不太了解相关技术的朋友,希望能够帮到他们,解除他们的疑惑。 并非是讲给杨老师听的。反而,我遇到不懂的问题,还希望能得到杨老师的指教。  详情 回复 发表于 2023-8-3 13:46
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-8-3 13:46:23 | 显示全部楼层
本帖最后由 CosyOS 于 2023-8-3 13:54 编辑
杨*** 发表于 2023-8-3 13:27
你说了这只是你的个人观点,那么别人为什么要认可你的观点与你讨论呢?因此你应该先说明你这个观点的合理 ...

我说的关于using的使用原则和寄存器访问的问题,是为了提供给有需要的或不太了解相关技术的朋友,希望能够帮到他们,解除他们的疑惑。
并非是讲给杨老师听的。反而,我遇到不懂的问题,还希望能得到杨老师的指教。
能够帮到有需要的朋友就可以了,大家可以不认可我的观点。
“中断使用using后,寄存器库不用入出栈,在绝对寄存器访问时,少了8条PUSH,8条POP,共16条指令,还是会有明显提速。”,这句话当然是我做了多年嵌入式开发千百次实验的结果,如果有异议可以自行实验。当然,这指的是C函数中断,编译后一定是这样的。

点评

好的,我来试试  详情 回复 发表于 2023-8-3 14:00
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-8-3 13:59:08 | 显示全部楼层
Cos*** 发表于 2023-8-1 13:56
Keil C51 寄存器库 / 寄存器访问 / using

鉴于很多朋友可能对Keil C51的寄存器访问、using的使用原则等不 ...

你的这个帖子“Keil C51 寄存器库 / 寄存器访问 / using”,其中的一些观点,我很不赞同,但不知道如何来与你交流。刚才看了熊仔的回复,我才想通问题出在哪里。

(1)你想让别人接受一个观点,除了阐明观点本身外,你也要从理论上或者实践上证明你的观点的合理性。比如这个主题,你大可以指明出自Keil编译器手册或者说明书的何处,引用了别人的什么书,什么文章,又或者你自己写了什么程序,得到了什么结果来证明你的观点等等。但是你的这篇帖子显然这两方面少了。
(2)我相信你不会随意发文,我相信你自己下面已经做了大量的工作,对你的观点已经从理论和实践上论证过了,只是你没有说出来。本版块的主题RTOS编程属于高层次的单片机编程,相信很多读者都不熟悉,但又都想了解和掌握。而正确地在中断和实时任务中使用寄存器和寄存器页(REG BANK)是编写STC单片机RTOS程序必须注意的重要问题,因此,建议你再继续发帖子,介绍你的观点的产生过程、依据了什么、你为此已经编过的测试程序及结果,把这个过程介绍给大家,我相信这不但会证明你观点的合理性,大家也一定会从这个过程受益匪浅。我觉得这种方法才是大神的一种授人以鱼不如授人以渔的交流方法。

点评

感谢杨老师的建议,以后我再发表论述的时候,都会理论结合实践,相关技术手册中的说明再结合验证程序,不再空谈。  详情 回复 发表于 2023-8-3 14:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-8-3 14:00:48 | 显示全部楼层
Cos*** 发表于 2023-8-3 13:46
我说的关于using的使用原则和寄存器访问的问题,是为了提供给有需要的或不太了解相关技术的朋友,希望能够 ...

好的,我来试试

点评

楼主看看像我这样写会不会容易理解一些? 关于在C51中断程序中使用“using”指令的情况研究 (1)本文范例来自“STC8H8K64U实验箱-V9.6”范例中的“01.1-用P6口做跑马灯-入门版”和“02-Timer0-Timer1-Timer2-Tim  详情 回复 发表于 2023-8-3 16:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-8-3 14:05:32 | 显示全部楼层
杨*** 发表于 2023-8-3 13:59
你的这个帖子“Keil C51 寄存器库 / 寄存器访问 / using”,其中的一些观点,我很不赞同,但不知道如何来 ...

感谢杨老师的建议,以后我再发表论述的时候,都会理论结合实践,相关技术手册中的说明再结合验证程序,不再空谈。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-8-3 16:42:28 | 显示全部楼层
本帖最后由 杨*** 于 2023-8-3 22:24 编辑

楼主看看像我这样写会不会容易理解一些?



关于在C51中断程序中使用“using”指令的情况研究
1)本文范例来自“STC8H8K64U实验箱-V9.6”范例中的“01.1-P6口做跑马灯-入门版”和“02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序”。本范例见文后附件。
2)本范例目的是讨论C语言中“using”指令的作用,就将5个定时器的工作频率都设置为50Hz,并且将软件延时函数“delay_ms”改为32位的,这部分程序见下图:
Fig01_设置.jpg
3)本范例中的5个定时器中断服务程序分别设置了不使用“using”(定时器0)和分别使用“using 0”、“using 1”等,见下图:
Fig02_USING.jpg
4)下面是这些定时器01的中断C语言ISR经过C51编译后的汇编语言:
Fig03_ISR.jpg
其中第674到第712行是定时器0的汇编程序,第714到第744行是定时器1的汇编程序。
从两者对比来看,除了对AR0-AR7寄存器现场的保存和恢复,两者是一样的。

5)下面是这些定时器23的中断C语言ISR经过C51编译后的汇编语言:
Fig04_ISR23.jpg
对比前面,可以看到对于定时器123,它们的差别值在于在保留了PSW后(PUSH   PSW),对后面程序使用的寄存器页的设置不同,
MOV    PSW,#00H -->  0
MOV     PSW,#08H -->  1
MOV     PSW,#10H -->  2
6)结论1,不使用“using”关键字与使用“using 0”关键字的差别是,对后者C51编译器产生的ISR汇编语言不会保存和恢复寄存器AR0-AR7现场,
7)结论2,不使用“using”关键字,C51编译器产生的ISR汇编语言会保存和恢复寄存器AR0-AR7现场。使用“using”关键字,C51编译器产生的ISR汇编语言不会保存和恢复寄存器AR0-AR7现场,仅仅是指定下面中断程序使用的寄存器页。

8)理论依据:下图是Keil的帮助文档,说明了在C语言中使用“using”关键字的方法和效果:
Fig05_C51.jpg
9C51采用这个策略的原因是既照顾了一般情况(不使用“using”),C51会自动地保存寄存器现场,又照顾了特殊情况(使用“using”,包括“using 0”),如果要保存恢复该页的寄存器现场,用户自己在C语言中插入汇编语言实现。
10)熊仔和我与楼主的差别是我们说的在A51中使用的“USING”,楼主说的是C51中的。

RTOS程序中,中断程序通常是用汇编语言编写,在A51中“USING”的用法与含义与C51中不同,下图是Keil的帮助文档,说明了在A51语言中使用“USING”关键字的方法和效果:
Fig06_A51.jpg
11)在A51中,“USING”的用途是在后面的汇编程序中,自动地将汇编语言助记符AR0-AR7自动地转换该寄存器页的绝对地址。这个用法在A51汇编语言不限于中断程序,任何地方都可以用和可以反复使用。
并且汇编语言的“USING”语句,不仅在A51中有效,在A251C51/C251的内嵌汇编语言程序都可以使用(用大写,不限于指定中断和函数)。

12)由于在STC单片机程序设计中寄存器的使用这个主题很重要,还有很多知识点值得讨论,也由于新帖子才能看到主题的标题,建议楼主再新开一个帖子,大家跟进交流,这个主题就不在这里盖高楼了。

01_中断测试程序.rar (46.94 KB, 下载次数: 319)





点评

杨老师讲的非常好,理论结合实践,还对A51的USING做了重要补充,是专业级水准。  详情 回复 发表于 2023-8-3 17:39
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:432
  • 最近打卡:2025-05-01 16:19:56

5

主题

1127

回帖

4263

积分

荣誉版主

积分
4263
发表于 2023-8-3 17:39:36 | 显示全部楼层
杨*** 发表于 2023-8-3 16:42
楼主看看像我这样写会不会容易理解一些?

杨老师讲的非常好,理论结合实践,还对A51的USING做了重要补充,是专业级水准。
回复 支持 反对

使用道具 举报 送花

2

主题

185

回帖

1048

积分

金牌会员

积分
1048
发表于 2023-8-3 21:34:06 | 显示全部楼层
中断使用USING提升效率还是挺大的,使用原则是同一优先级的中断使用同一寄存器组,不同优先级的中断使用不同的寄存器组
回复 支持 反对

使用道具 举报 送花

11

主题

340

回帖

929

积分

荣誉版主

积分
929
发表于 2023-8-6 00:07:05 | 显示全部楼层
本帖最后由 熊仔 于 2023-8-6 00:10 编辑

抢占式OS。需要用户单独处理中断函数的时候,处理不同的USING比较麻烦。
当然是有提升效率。也就16条指令。16MHz主频的话1us。32MHz主频0.5us,对于1T的STC 51单片机提升零点几us用处不是很大。
对于12T运行的,提升就很大了。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 04:14 , Processed in 0.340081 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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