您的位置:首页 > 运维架构 > Linux

在Linux下进行C51开发

2014-01-18 14:29 525 查看
半年前折腾过一次Ubuntu,但是因为锐捷的校园网封锁了Mentohus之类的第三方客户端,所以放弃了Linux。之后一些Linux下的用户向网络管理员反映,终于开放了第三方客户端。这也使我重拾勇气,得以在Linux中畅游。正巧这段时间在学习C51,因此必须在Linux这个平台上找到合适的替代品,花了一天的时间,总算完成了基本的配置。好的,进入正题。

1.基本环境

操作系统:Ubuntu_12.04_LTS

文本编辑器:Vim_7.3

编译器:SDCC_2.9

烧录工具:kSTCISP

C51芯片:STC89C52

2.编辑器

为了强迫自己在键盘上操作,我选择了被不少人称之为“神器”的Vim。

Debian/Ubuntu安装:

sudo apt-get install vim


如果不喜欢在终端里写代码,可以使用gVim。

sudo apt-get install vim-gnome


IDE的话,强烈推荐MCU8051,功能极其丰富,并且有友好的中文界面。类似Windows下的Keil。

在Ubuntu_Software_Center中可直接安装。



3.编译

SDCC全称“Smell Devic C Compiler”。

安装:

sudo apt-get sdcc sdcc-doc


在终端下使用它编译C文件很简单:

sdcc file.c


而MCU8051中自带的编译器就是SDCC,因此直接按F11就可以编译。

这里要注意的是,SDCC和Keil的源代码有些不同,

“非ANSI C的关键字,SDCC均采用双下滑线开头的方式定义,如__code,__idata,__sbit”
——引用自《SDCC编译器简明使用教程》

这篇文章中说得比较详细,我也正是通过它才顺利通过编译。

还有一点,SDCC使用的C标准是C99,因此不可出现

__sbit __at P1_0 A


这样的申明,否则会报错:

Initializer element is not constant


应该如此申明:

__sbit __at (0x90) A


因为在8051.h头文件中,

__sbit __at (0x90) P1_0


具体可参看《C C++全局变量初始化 initializer element is not constant 错误 c++中为什么不能对全局变量在函数外赋值》

4.烧录

SDCC编译后的文件为.hex,但是烧录时需要用.bin文件,因此在终端中cd进编译后的文件目录,输入:

objcopy -I ihex -O binary file.hex file.bin


如果使用USB转r232的话,不用担心驱动问题,Ubuntu中集成了pl2303的驱动,只要在终端中输入:

dmesg | tail


就可以查看自己板子所接的端口名:



接下来开始烧录:

STC官方只有Windows下的烧录软件(而且还不好用),这边我发现一个很棒的STC89C52烧录软件,叫kSTCISP,作者是个高中生。

下载地址:http://rgwan.byethost10.com/archives/1196

下载过程也很简单,选择端口、.bin文件,先按下载,再给板子上电。大功告成!

第一次写博客,如有错误,还望指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: