sdcc的一个简单的示例

2019-04-15 13:14发布

首先编写一个源文件假设为main.c,内容如下: #include #define led1 P2_0 void 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来安装。