标题: 义隆单片机编译小结 [打印本页]

作者: heicc    时间: 2015-1-5 16:42
标题: 义隆单片机编译小结
c语言编译单片机程序。比如编译MCS-51或者AVR有时会说开发效率比汇编高,而开发PIC和ELAN却发现,c语言许多经典的格式都无法使用。MCS-51在RAM空间开辟堆栈时会考虑堆栈时会考虑,因为深度而像C语言里面的函数嵌套,计算阶乘时不可以想c语言那样使用函数嵌套。ELAN的c编译器在使用过程发现,不宜使用局部变量,最好有和书写汇编是同样的数据空间分配思想。对定义的变量进行地址定位,uchar data1 @20 :bank 0;bit buzzer @0x20 @0:bank 0;。
今天写程序时编译总会进入死循环,uchar i;for(i=0;i<5;i++);这样的语句会进入死循环。在反汇编窗口观察反汇编代码发现i被定位在数据空间0x39,仪陇单片机78P153S的用户数据空间从0x20-0x2f超出空间,应该是编译器的问题。修改局部变量为全局变量并定位,uchar i @0x20:bank 0;就不会出现上面的问题。
MCS-51有128字节的数据存储空间r0-r7寄存器有七组,可以定义很大的数组,ELAN的数据存储空间,定义一个15的数组编译就会出现数据存储空间不足的编译警告。stc单片机4k的,16k很常见,所以从来用c语言不太考虑程序空间的开销。曾经用11F02做LED大屏幕显示,32幅32*48图像的字模存储超出了2k空间,后来考虑11f03,后来就压缩成16*24的了。仪陇的153只有1k,156也只有1k,468,447有2k,经常编程序就超出空间,不得不苦苦思索程序压缩。
STC的单片机都是串口编程,烧写次数多达100000次,所以开发调试就是不停的下载调试。
早上烧仪陇单片机,烧程序调试,一个小时内我扔了7个单片机到垃圾桶,就不扔了,OTP编程牛的一踏,每每开发一个产品会有多少单片机牺牲。
下午就用仿真器调试了,发现了好多问题,当正确按说明进入系统,蜂鸣器鸣叫一声,黄灯闪烁一次,进入编码,输入密码,一项的实现时,对自己说,小翔翔,快觉悟了,加油。所有的都是一个人苦心去悟出来的。


作者: chjx0131    时间: 2016-6-20 16:13
嘿嘿,你用C语言搞的?
作者: icu    时间: 2017-11-23 10:12
请问楼主,你是用的义隆哪个型号的MCU,一般OTP的话少有用C语言的。
我之前是用汇编做的。如果你要什么帮助的话,可以找我。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1