找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3273|回复: 32
打印 上一主题 下一主题
收起左侧

为何单片机的厂家没有自己的编译器呢?

  [复制链接]
跳转到指定楼层
楼主
ID:283954 发表于 2021-8-3 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
玩了四年的STC单片机,都是用汇编来写程序,也没什么困难,前些日子想试STC16,去KEIL下载了2051的编译器,填上要求报价表,不见回应,看来是太有钱懒得卖,只好用老办法打开,还能用,不过看了十六位的指令,没发现什么吸引人的功能,除非有什么大的目标要实现,还是窝在8位舒服些。

说到这8位机,从STC12玩起可说是一路风顺,内部功能逐一被调用,都没什么问题,后来玩到STC8,没有了晶振,体积又小,又很便宜,就玩起缩骨神功,把原来的设计变小,再变小,非常满足。

但很快就要玩到8位机的极限,由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7F了,程序就再也写不下去了,就奇怪为何STC单片机能够做出那么多扩展记忆体,就做不出多一点可以直接存取,能即刻赋值的记忆体,比如128-255,这部分已经用在内部的寄存器,无法被用来给程序赋值用。

想来想去,硬件制造不是问题,就搞多几个选择开关而已,问题在于软件,就算这样的芯片做出来了,也没有编译器能够去控制这些开关,根源就在于这些厂家没有自己的编译器,用的都是KEIL的,人人都用破译的,不用钱,没有人会笨到去开发自己的编译器。

但厂家就不一样,不是说是“国之重器”吗?找几个特勤劳的码农,给予高薪,不出几个月,准能把国产单片机的汇编编译器给搞出来,才能把古老8位单片机的剩余潜能给挖掘出来,避免有一天突然被掐脖子,也能让懒农能继续留在8位的窝里。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩1
回复

使用道具 举报

沙发
ID:883242 发表于 2021-8-3 17:26 | 只看该作者
汇编编译器太简单了吧,我一天就能写一个。难的是高效率的c语言编译器,免费的SDCC搞了这么多年,编译效率还是差了Keil C51一大截。
回复

使用道具 举报

板凳
ID:57657 发表于 2021-8-3 17:35 | 只看该作者
STC是经过AT型号新增了一些寄存器、中断来的。
目前国内的编译器还属于卡脖子技术,还无法摆脱keil软件。
回复

使用道具 举报

地板
ID:419909 发表于 2021-8-3 18:03 | 只看该作者
STC也一直用汇编的.都是牛人.!我们只能用C.组竟目前觉得这些单片机的FLASH还算够大.
用汇编的话.不是一般建议用其它国产更便宜的单片机吗?才1块甚至几毛钱,量大成本省不少.没必要用STC.
回复

使用道具 举报

5#
ID:401564 发表于 2021-8-3 19:47 | 只看该作者
"掐脖子"这个词语是跟HW相关的自媒体最喜欢的一个词语
在这个单片机技术专业相对比较强的论坛,没有必要说这个,因为,我们几乎没有脖子给别人掐
英特尔1981年老古董,能让STC成为"全球最大8051单片机设计公司",这是STC自己说的
能做晶圆的就那几个厂,封装都是日本那味精厂提供的材料,核心企业没一家是我国的
楼上已经有人说了,汇编还要什么编译器,Keil都是集成汇编编译器的
现在不好做的是C编译器,就是把C语言转换成汇编的,那才是困难的,至于成本多大我不知道,我只知道没有什么厂商愿意搞
人家大学教授都知道拿别的芯片来打磨(汉芯造假),银子就到手了,谁还有心情搞编译器呀,说不定编译器刚刚搞好,厂子就倒闭了呢
看看寒武纪就知道了,股票一解禁,大股东直接套现走人,几个亿到手
目光短浅的我,如果手头上有几个亿,编译器?学单片机?逛论坛?我呵呵!我无法想象银行存款一天的利息比我加班一个月还多是一种怎样的生活
回复

使用道具 举报

6#
ID:170318 发表于 2021-8-4 09:49 | 只看该作者
wfqxgw 发表于 2021-8-3 18:03
STC也一直用汇编的.都是牛人.!我们只能用C.组竟目前觉得这些单片机的FLASH还算够大.
用汇编的话.不是一般 ...

请推荐价格低廉的或者几毛钱的单片机,谢谢!
回复

使用道具 举报

7#
ID:57657 发表于 2021-8-4 11:32 | 只看该作者
Y_G_G 发表于 2021-8-3 19:47
"掐脖子"这个词语是跟HW相关的自媒体最喜欢的一个词语
在这个单片机技术专业相对比较强的论坛,没有必要说 ...

8051指令集 都是美国的,没人愿意再搞国产8051编译器。
只有研发 国产指令集 才有 国产编译器。
回复

使用道具 举报

8#
ID:883242 发表于 2021-8-4 18:44 | 只看该作者
npn 发表于 2021-8-4 11:32
8051指令集 都是美国的,没人愿意再搞国产8051编译器。
只有研发 国产指令集 才有 国产编译器。

指令集专利有效期15年,所以死太惨可以放心大胆的做51单片机。
回复

使用道具 举报

9#
ID:401564 发表于 2021-8-4 19:25 | 只看该作者
Hephaestus 发表于 2021-8-4 18:44
指令集专利有效期15年,所以死太惨可以放心大胆的做51单片机。

指令集是没有专利,你说的专利是物理层面的,说白了就是内核或者电路
汇编指令就那几条:+-*/与或非和跳转,还有左右移位的
国产有几个公司就是完全兼容PIC汇编指令的,连寄存器地址都是一样的
在制造行业,8位单片机就性能,没有什么好折腾的了,还有什么好研发的?就跟LM358一样了,没有必要研发了
但晶圆,光刻和封装我们做不了,老外也没几个厂商能做的
你看这次晶圆厂产量减少,几乎所有的芯片都没货......
回复

使用道具 举报

10#
ID:883242 发表于 2021-8-4 20:00 | 只看该作者
Y_G_G 发表于 2021-8-4 19:25
指令集是没有专利,你说的专利是物理层面的,说白了就是内核或者电路
汇编指令就那几条:+-*/与或非和跳转, ...

谁说没有专利,IBM当年选Intel做PC的CPU供货商要求找一个备胎,Intel就找了对门的AMD,然后IBM逼着Intel签了一个授权AMD使用x86指令集及其扩展的协议书,现在AMD最重要的资产就是这张纸。

还有一个叫Transmeta的公司,95年成立,秘密研发兼容386的CPU,他的技术路线实现方法跟Intel完全不一样,到了99年386指令集专利过期,马上推出自己的CPU,可以跑Windows、Word、Excel,能耗比优于Intel/AMD的CPU,适合于笔记本。但是Intel也没闲着,一直给x86指令集扩展打补丁,Transmeta的CPU因为专利问题不能跑MMX等指令集,多媒体性能不佳,卖了几年后倒闭了。
回复

使用道具 举报

11#
ID:47286 发表于 2021-8-4 20:05 | 只看该作者
大哥 你想的太简单了 这东西不是有个编译器的问题 是个科技树的问题 就好比先让你无比了解一切突击步的制造过程 包括火药的制造过程 然后把你穿越到宋朝 算了 太远 明朝吧 也根本不可能造出来

我们的现状就是应用研究 没时间 没精力搞基础研究 但没有基础研究基本上就不可能有自己的产品 无非是在人家的基础上改一改 从改革开放开始才开始进入工业化 这之前都是个农业国 就这么几十年 发展已经飞快了 不要一下要求太多
回复

使用道具 举报

12#
ID:57657 发表于 2021-8-4 20:11 | 只看该作者
Y_G_G 发表于 2021-8-4 19:25
指令集是没有专利,你说的专利是物理层面的,说白了就是内核或者电路
汇编指令就那几条:+-*/与或非和跳转, ...

8位单片机主要价格优先,当主频达到上百Mhz,生产成本几乎与32位划等号。
回复

使用道具 举报

13#
ID:883242 发表于 2021-8-4 21:47 | 只看该作者
dzbj 发表于 2021-8-4 20:05
大哥 你想的太简单了 这东西不是有个编译器的问题 是个科技树的问题 就好比先让你无比了解一切突击步的制造 ...

没你说的这么复杂,找精通编译器人的改造一个很简单也花不了几个钱,当年avr-gcc就是atmel赞助的。

问题是生产51的国内厂家觉得这种做法只有投入没有回报所以不做。
回复

使用道具 举报

14#
ID:47286 发表于 2021-8-4 21:59 | 只看该作者
Hephaestus 发表于 2021-8-4 21:47
没你说的这么复杂,找精通编译器人的改造一个很简单也花不了几个钱,当年avr-gcc就是atmel赞助的。

问 ...

你这意思和我说的两码事吧 改造也不是自己造啊 就算找keil买编译器版权 那也不是自己造的 不是么 atmel也不是国产的
回复

使用道具 举报

15#
ID:401564 发表于 2021-8-4 23:33 | 只看该作者
Hephaestus 发表于 2021-8-4 20:00
谁说没有专利,IBM当年选Intel做PC的CPU供货商要求找一个备胎,Intel就找了对门的AMD,然后IBM逼着Intel ...

那是硬件电路上的东西
不是指令集,你的说专利是执行当前硬件的电路或者内核
你去看一下大家常用的8051指令,它能有专利?
MOV P0,A    这个是把累加器A的值传送到P0端口,你告诉我一下,专利何在?
如果有专利,随便就能避开!
跳转指令:8051用的是JMP
PIC用的是GOTO
那我中文用tiao行不行?
人家说的专利是硬件电路的制造工艺,不同的指令集制造工艺是不一样的,大概就是:我这个1+1=2用的是这个电路,你就不能用,你1+1=2就得用别的电路
8位单片机最多256条指令,8051就是255条
精简指令一般是30条指令左右,无非就是+-*/之类的,一个二进制的机器语言是没有专利的
如果是软件的话,专利大多是算法专利
回复

使用道具 举报

16#
ID:883242 发表于 2021-8-4 23:58 | 只看该作者
Y_G_G 发表于 2021-8-4 23:33
那是硬件电路上的东西
不是指令集,你的说专利是执行当前硬件的电路或者内核
你去看一下大家常用的8051 ...

Instruction Set Architecture是有专利的,包括寄存器模式、指令集等等。

你说的那些也是曾经存在过的,Z80就是靠修改了汇编伪码绕开了8080专利,实现了对8080指令的兼容和扩展。但是ISA专利是80年代中期律师们发明创造出来,再像Z80那种手段已经绕不开了。
回复

使用道具 举报

17#
ID:420836 发表于 2021-8-5 08:47 | 只看该作者
Microchip、德州仪器和ST都有自己的单片机编程和编译软件。
回复

使用道具 举报

18#
ID:798631 发表于 2021-8-5 09:05 | 只看该作者
首先想想有没有必要吧,没必要的话花那钱不是成本么。在现有的基础上  通用的编程软件能用,没人会去再研发的,研发费用高,测试周期长先不说,就说研发出来谁用啊。TI自己做的IDE我反正是不用的  用IAR用熟了,用TI的特别不顺手,做成完全一样的也就没有意义了。破解版本满世界都是,最高版本的软件有几个人老手在用,我的好多朋友都还在用KEIL 4,   AD6.0,无他手熟了   
回复

使用道具 举报

19#
ID:958310 发表于 2021-8-5 10:49 | 只看该作者
",由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7F了"
回复

使用道具 举报

20#
ID:958310 发表于 2021-8-5 10:49 | 只看该作者
“,由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7F了”这句话是什么意思啊?
回复

使用道具 举报

21#
ID:419909 发表于 2021-8-5 11:05 | 只看该作者
bigbigcong 发表于 2021-8-5 10:49
“,由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7 ...

估计是51独有的那点内存.最快那块.
回复

使用道具 举报

22#
ID:584195 发表于 2021-8-5 12:49 | 只看该作者
bigbigcong 发表于 2021-8-5 10:49
“,由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7 ...

7f 就是16进制的,也就是127 只是表不同而已。俗话说的半斤八两吧。
回复

使用道具 举报

23#
ID:283954 发表于 2021-8-5 16:37 | 只看该作者
bigbigcong 发表于 2021-8-5 10:49
“,由于刚学的时候不懂得0-127,能即刻赋值的记忆体的宝贵,把其中大部分用在设定参数上,现在已经用到快7 ...

51单片机从0到127的记忆体是最重要的,能即刻赋值,比如MOV 33H, #20, 能运算决定流程,比如DJNZ 33H,THERE,能直接传给另一个记忆体,比如MOV 34H, 33H,能即刻增量或减量,如 INC 33H, DEC 33H,  最近才看见有人说可以PUSH, POP, 这是编写程序最需要的资源,没有其他资源可以替代,当你把这些资源用完以后就再也写不下去了,这时想如果还有MOV 80H,#20可用多好!或者MOV FFH, #20更好,但这部分都是内部使用的寄存器,盲目赋值后会得到你不想要的结果,比如串口波特率改变,或在IO口输出一些数值,这部分的用途可查看51说明书,我看了一下,到了STC8G几乎用完,没有发展空间了。

如果厂商有自己的汇编编译器,他就有可能可以用附加的指令,比如MOVZ,80H, #20 等指令,在编译成机器码时加上选择记忆体的逻辑开关,再加上原来的指令,执行后把开关拨回原来的样子,我就能有另外的资源可以编程了。

但这些都是厂家的事,外人是做不来的,对于力图在原有51架构上增加附加功能的厂家,我们只能玩51的人还是非常感激的。

会玩51的人数国内应该是百万级的吧,这就是生态,51还能玩很多年的,至于那个2051,文献都说当年推出后也没有流行起来,连祖师爷INTEL都没办法,谁还能行呢?
回复

使用道具 举报

24#
ID:883242 发表于 2021-8-5 19:57 | 只看该作者
TTQ001 发表于 2021-8-5 08:47
Microchip、德州仪器和ST都有自己的单片机编程和编译软件。

太小太别扭的单片机才有自己的编译软件,规模稍微大一些的单片机都是gcc。
回复

使用道具 举报

25#
ID:147710 发表于 2021-9-19 11:46 | 只看该作者
汇编精简指令就几十条,所有的算法都在里面倒腾,一竿子到底直达底层硬件,玩起来很有掌控感,能理解楼主的这种爽,但商业化操作要求的是低成本(硬件成本,学习成本,开发成本,维护成本),高性能,上市迅速,现在产品逐渐在网络化(USB,WiFi),可视化(摄像头,显示屏),开发动不动就上操作系统,各种库函数,API,感觉现在软件逐渐在硬件化,各种带MCU的专用IC大量涌现,开发产品就像搭积木,在操作系统下调用几个硬件厂商提供的API就搞定了,估计以后除了芯片开发,大量应用开发者压根不再有机会接触到寄存器了。芯片荒之前,20多块就能买到的MCU:K210,主频400M(最高能到600M),带硬件视觉算法,AI算法,真不敢想象。
回复

使用道具 举报

26#
ID:624769 发表于 2021-9-19 21:20 | 只看该作者
你的主要需求矛盾 是:  直接寻址  寄存器  太少, 只有 7F, 对吧?
这个编译器有一毛钱关系么? 硬件上,直接寻址寄存器 只有 0~7F,   80~FF 给特殊寄存器用了, 你编译器再开发能改变这个问题么?

然后,你说你直接寻址寄存器 只到7F 不够用, 我是相当不理解的,去掉通用寄存去 R0-R7 4组 32个字节, 去掉位寻址寄存器 16个字节, 至少还有 80 个字节的 可直接寻址的寄存器,居然不够用??
你有那么多参数,是必须直接寻址的? 你设置80个变量名,自己能记住么? 你写代码,完全不用循环节的?
我见过好多人抱怨特殊寄存器不能间接寻址,无法把 80~FF 的特殊寄存器的内容批量读出来,批量赋值我倒还觉得抱怨的优点道理,直接寻址寄存器 80个字节怎么都够了阿~ 真有那么多变量,有几个人是不用指针去处理的?起80个不带重复的变量名,还不带数字的我觉得难度好高的说,但凡带了数字的命名变量,哪怕间接寻址,也不会觉得麻烦和不方便了吧?
反正,我就见过好多 几K 扩展内存都不够用的人,直接寻址寄存器,都用不到10个。遇到特殊项目抱怨位地址寄存器少的到是有。
回复

使用道具 举报

27#
ID:283954 发表于 2021-9-20 01:22 | 只看该作者
说的很对,直接寻址寄存器一般是够用的,但我当初开始学写的时候还不懂得这些寄存器的珍贵,把5组设定共25个寄存器给用了,随着代码越来越多,需要用到更多寄存器,慢慢就用完了,已经尝试把很多移到间接寻址的寄存器,但毕竟像挤旧牙膏式的,挤一点用一点,我是希望能有一个新的牙膏用,新款的51单片机已经作了很多新的扩充,就是这部分没有进展,推测是因为没有自己的编译器,限制了发展。看看我的寄存器表:

;30H FOR MEMORY INDEXING EPROM START READ HERE
;31H FOR PLAYMODE
;32H FOR CHANNEL SET

;----------------------------
;33H FOR PROGRAM SET1
;34H FOR PROGRAM SET2
;35H FOR PROGRAM SET3
;36H FOR PROGRAM SET4
;37H FOR PROGRAM SET5

;38H FOR VOLUME SET1
;39H FOR VOLUME SET2
;3AH FOR VOLUME SET3
;3BH FOR VOLUME SET4
;3CH FOR VOLUME SET5

;3DH FOR OCTACT SET1
;3EH FOR OCTACT SET2
;3FH FOR OCTACT SET3
;40H FOR OCTACT SET4
;41H FOR OCTACT SET5

;42H FOR BANK M SET1
;43H FOR BANK M SET2
;44H FOR BANK M SET3
;45H FOR BANK M SET4
;46H FOR BANK M SET5

;47H FOR BANK L SET1
;48H FOR BANK L SET2
;49H FOR BANK L SET3
;4AH FOR BANK L SET4
;4BH FOR BANK L SET5

;4CH FOR ATTACK SET1
;4DH FOR ATTACK SET2
;4EH FOR ATTACK SET3
;4FH FOR ATTACK SET4
;50H FOR ATTACK SET5

;------------------------
;51H FOR LOAD PROGRAM
;52H FOR LOAD VOLUME
;53H FOR LOAD OCTACT
;54H FOR LOAD BANK M --EPROM READ UNTIL HERE
;55H FOR LOAD BANK_L
;56H FOR LOAD ATTACK
;57H ADC CHANNEL


;58H FOR STORE LAST CHANNEL
;59H FOR REMEMBER LAYER SENT
;5AH FOR STORE STATUS
;5BH FOR STORE FIRSTDATA
;5CH FOR STORE SECONDDATA
;5DH FOR REMMBERLAST STATUS
;5EH FOR REMEMBER NUMERIC KEY# 1-9(USE FOR TASK MAP)
;5FH FOR REMEMBER PRESET NUMBER(1-5)

;60H FOR SYSTEM VOLUME
;61H FOR TEMP(SAVE MODE)
;62H FOR LEDTIME PRESET
;63H FOR MEMORY R1
;64H FREE
;65H FOR IR VALUE
;66H FREE
;67H FREE
;68H FREE
;6AH NO USE
;6BH NO USE
;6CH FOR x10
;6DH,6EH.6FH FOR LED DISPLAY LOOP TIME
;70H FOR PLAYNOTESUB STORE NOTE NUMBER TO PLAY
;71H DELAY
;72H DELAY
;73H DELAY
;74H FREE
;75H FREE
;76H IS FOR COUNT SEVERAL KEY PRESS BY SEQUENCE, IF MATCH THEN LOAD DEFAULT
;77H FOR TRANSPOSE
;78H FOR MEMORY ADC VALUE
;79H FOR STORE MAX ADC HIGH VALUE
;7AH FOR ADJUST ADC VLAUE
;7BH FOR ADC LOW VALUE
;7CH FOR AVERAGE 7AH
;7FH FOR PCA COUNT

;BIT 12H FOR CONTROL LED DISPLAY USING TIMER
;BIT 13H FOR MARK AS "NOTE ON/OFF" STATUS
;BIT 14H FOR MARK AS DIRECT MODE NO MORE USE
;BIT 15H FOR PROGRAM SEND
;BIT 16H FOR PRESSURE SEND
;BIT 17H, 18H FOR RUNNING STATUS
;BIT 20H FOR DOUBLE LAYER
;BIT 20H FOR SILENT MODE, NOW NOT USE
;BIT 21H FOR SPLIT MODE
;BIT 23H FOR ADC BUSY
;BIT 24H FOR INTRARED CODE VALID
;BIT 25H FOR TOTAL DIRECT
;BIT 26H FOR IR REPEAT
;BIT 40H FOR UART1 BUSY
;BIT 41H FOR UART2 BUSY
;BIT 43H FOR MIDIOUT BUSY
;BIT 47H FOR PCA INT MARK
;BIT 48H FOR
;BIT 49H FOR SECONDDATA(NOT)x10 SWITCH
;BIT 4AH
;BIT 59H FOR SWITCH MENUS x16
回复

使用道具 举报

28#
ID:624769 发表于 2021-9-20 15:21 | 只看该作者
dalaoshi 发表于 2021-9-20 01:22
说的很对,直接寻址寄存器一般是够用的,但我当初开始学写的时候还不懂得这些寄存器的珍贵,把5组设定共25 ...

天哪……
你汇编编程的时候,不会跟我说,都是看这些注释,然后,直接打地址,编程的吧?

一般不都是:
PROGRAM_SEND    BIT   15H
PRESSURE_SEND    BIT   16H
或者:
MY_BIT_SETTING   Segment BIT
RSEG  MY_BIT_SETTING
PROGRAM_SEND:    DBIT   1
PRESSURE_SEND:    DBIT   1

这样设置好,然后,下面打代码的时候直接引用的么?
SETB   PROGRAM_SEND
CLS     PRESSURE_SEND

回复

使用道具 举报

29#
ID:624769 发表于 2021-9-20 21:59 | 只看该作者
dalaoshi 发表于 2021-9-20 01:22
说的很对,直接寻址寄存器一般是够用的,但我当初开始学写的时候还不懂得这些寄存器的珍贵,把5组设定共25 ...

首先,按你的的这个表看, 很多东西应该是批量处理的, 完全就应该用的间接地址,而不应该用直接地址.

其次,看你发的这个东西类似注释,那么换句话说这些地址你都没有定义, 你完全是在编写程序时,直接输入的地址,而不是地址代号. 那么, 可以这么说,任何编译器对你的意义都不大,
为什么这么说呢, 编译器的作用主要是对很多代号的处理上, 比如 LJMP  MAIN    就会挑砖到 MAIN:  这个标志的地方。这是编译器的用途,当然,你可以不使用编译器的这个功能, 而直接使用, LJMP  0100H   来跳到主程序的地址。甚至你只要稍微花点时间计一下255个指令, 你可以抛弃编译器, 直接用16进制编辑器(WinHEX) 这类的,直接用 02 01 00  这样的方式来写 LJMP 0100H ,  所以,就算有国产的编译软件,前提也是要按编译软件的要求养成习惯进行才行, 就好像 大多数人,把P0端口所有 IO拉低 都会用 MOV  P0,#00H  而不会用  MOV   80,#00H 。 为什么呢? 因为考虑到将来的升级或者变更,假定下一个单片机 P0 不是 80了怎么办?
假定,如你所愿编译器可以 用 MOV  xxxx, #00H   对某个间接地址直接写,其实编译器做的就是 后台, MOV  R0,#xxxx     MOV   @R0,#00H   这两个操作, 但是,前提,这个 xxxx 肯定是一个代号,而不是一个地址。 那么编译器才可能 “ 相对智能的” 根据你命名这个代号的时候  是  IDATA 还是 DATA 来区分,而你光用地址的话,如何区分??
回复

使用道具 举报

30#
ID:824490 发表于 2021-9-20 23:51 | 只看该作者
开饭店的,也没见过他种大米。。
回复

使用道具 举报

31#
ID:283954 发表于 2021-9-22 15:41 | 只看该作者
188610329 发表于 2021-9-20 21:59
首先,按你的的这个表看, 很多东西应该是批量处理的, 完全就应该用的间接地址,而不应该用直接地址.

其 ...

如你所言,前面那25个参数是可以移到间接寻址的,这样旧牙膏还能挤出多几滴,但颇费周章。

也不知道什么时候起,我就养成把寄存器的用途注释放在代码前面的习惯,觉得这样做顶好的,如果把某个寄存器命名成某个名字,刚使用还能记住,一段时间后就记不住了,因为名字不可能太长,而且很多限制,这办法能写上一段文字说明,编程是直接写号码就行,而且很工整。

代号主要是用在副程式,我还有一个习惯,就是副程式的回归一定要跳到末尾,不要中间就跳走,比如:
SENTBYTE:
......
JB 30H, SENTBYTEEXIT
......
SENTBYTEEXIT:
RET

这样维护起来简单。
回复

使用道具 举报

32#
ID:624769 发表于 2021-9-22 16:54 | 只看该作者
dalaoshi 发表于 2021-9-22 15:41
如你所言,前面那25个参数是可以移到间接寻址的,这样旧牙膏还能挤出多几滴,但颇费周章。

也不知道什 ...

首先,命名可以很长,其次,命名后,在他的后面,一样可以 ;+ 注释。
与其说命名,到不如说标签吧,依赖各种标签,伪指令,预编程的人,才会对编译器有各种要求。你应该不属于此类。
每个人的编写习惯,我不做评论。
我想说的是:按你的编写习惯,压根不需要什么国产自己的编译器,因为说得不好听一点,你只要再记一下255个指令的16进制代码,就可以了直接用16进制编辑器来编程了。或者在TXT编辑器了,编写后,用忽略回车的方式,转16进制文件,就是程序文件了。所以为何会发这个主题,比较困惑。
回复

使用道具 举报

33#
ID:967978 发表于 2021-9-26 09:20 | 只看该作者
每个单片机厂家开发、经营模式不一样,有的有自己的编译器,有的则没有。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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