找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3965|回复: 32
收起左侧

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

  [复制链接]
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个。遇到特殊项目抱怨位地址寄存器少的到是有。
回复

使用道具 举报

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

回复

使用道具 举报

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 来区分,而你光用地址的话,如何区分??
回复

使用道具 举报

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

也不知道什 ...

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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