sdcc的一个简单的示例

来源:互联网 发布:javascript delay 编辑:程序博客网 时间:2024/05/21 20:22

首先编写一个源文件假设为main.c,内容如下:

#include <at89x52.h>#define led1 P2_0void delayms(unsigned int ms){        unsigned int x, y;        for (y = ms; y > 0; y--) {                for (x = 227; x > 0; x--);        }}void main(void){        while (1) {                led1 = 0;                delayms(1000);                led1 = 1;                delayms(1000);        }}

之后,当然是编译这个源文件,使用命令:

$ sdcc main.c


编译完成之后将生成一堆的文件,不管它,只需要其中的main.ihx,最后当然是将它转换成我们需要的hex文件,命令如下:

$ packihx main.ihx > main.hex


hex文件生成之后,当然是下载进去看看最终的结果是否正确,为此,为了方便使用STC提供的STC-ISP软件来下载(板子为圈圈教你玩USB提供的板子,CPU为STC89C52RC),可是下载进去之后,LED并没有闪烁起来。最开始怀疑板子难道坏了,因为很久都没有用过它了,无奈,下载了一个圈圈教你玩USB提供的一个示例程序进去,能够运行起来,证明板子是没有问题的。又怀疑sdcc编译是否有问题,必须是否要加上一些编译选项之类的,为此,又不得不下载keil软件,同样的程序,下载进去之后居然能够运行起来,更加怀疑是自己没有编译好,又在网上参考了很多资料,也没有发现编译哪个地方出现了问题,还下了个proteus仿真软件,加载hex文件之后可以运行。好吧,现在又怀疑下载软件的问题,也许是STC-ISP只支持keil软件编译的呢,然后又尝试找一个Linux下的下载软件,找到了gSTCISP,可是呢,我为了图方便,就 直接使用了网上编译好的一个,一运行总是提示libvte.so.9没有找到,以为是我自己的Linux环境的问题,中间还把桌面环境给删掉了,好不容易才恢复回来,差一点就重装系统了。最后呢,还是从网上下载gSTCISP的源码包,老老实实的./configure make sudo make install来安装,gSTCISP需要到是bin文件,使用命令:

$ objcopy -I ihex -O binary main.hex main.bin

运行gSTCISP也没有出现问题,只是下载不是那么好下载,老是停在这里:

We are trying to connect to your MCU ...

反正下载不是那么顺利,但是好歹证明编译是没有问题的,以后就可以使用sdcc来开发单片机程序了。


其实呢中间还测试了一下,下载了sdcc的IDE环境来编译上面的那个程序,编译之后使用STC提供的ISP软件下载进去之后仍然没有运行起来,如果说使用命令行的sdcc编译有可能有问题的话,那么使用IDE应该没有问题了吧,更加坚信是下载软件的问题了,可以从这里下载sdcc IDE:http://mcu8051ide.sourceforge.net/

这里直接就有提供的ubuntu下的安装包,当然你可以直接使用命令sudo apt-get install mcu8051ide来安装。

0 0