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

全局不关总中断的 RTOS,CosyOS视频教学, 送【USB转双串口,烧录器,仿真器】

 火... [复制链接]

该用户从未签到

66

主题

715

回帖

1万

积分

荣誉版主

积分
10983
发表于 2023-8-3 12:41:01 | 显示全部楼层
熊仔 发表于 2023-8-3 12:33
我认为全部使用using 0,其实不差几个指令周期。中断寄存器组0 全部入栈,绝对地址访问,速度杠杆的,也就8 ...

你的这个看法是正确的,对于C51和C251编译器,你的这个看法符合8051指令集设计的初衷,符合编译器的设计宗旨,也是编译器自己缺省的寄存器使用方案
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    奋斗
    昨天 11:45
  • 签到天数: 197 天

    [LV.7]常住居民III

    5

    主题

    638

    回帖

    2609

    积分

    荣誉版主

    积分
    2609
     楼主| 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    66

    主题

    715

    回帖

    1万

    积分

    荣誉版主

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

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

    点评

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 11:45
  • 签到天数: 197 天

    [LV.7]常住居民III

    5

    主题

    638

    回帖

    2609

    积分

    荣誉版主

    积分
    2609
     楼主| 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    66

    主题

    715

    回帖

    1万

    积分

    荣誉版主

    积分
    10983
    发表于 2023-8-3 13:59:08 | 显示全部楼层
    CosyOS 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    66

    主题

    715

    回帖

    1万

    积分

    荣誉版主

    积分
    10983
    发表于 2023-8-3 14:00:48 | 显示全部楼层
    CosyOS 发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 11:45
  • 签到天数: 197 天

    [LV.7]常住居民III

    5

    主题

    638

    回帖

    2609

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    66

    主题

    715

    回帖

    1万

    积分

    荣誉版主

    积分
    10983
    发表于 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, 下载次数: 30)





    点评

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

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 11:45
  • 签到天数: 197 天

    [LV.7]常住居民III

    5

    主题

    638

    回帖

    2609

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    1

    主题

    126

    回帖

    699

    积分

    高级会员

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-6-11 05:05 , Processed in 0.086086 second(s), 76 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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