大家应该都记得,大学里的第一堂编程课,C语言,第一个程序就是在黑框中输出“Hello world !”。
就这么一个最简单的基于控制台的C语言程序,开启了我们的程序员的旅途。
当时,我们并不知道什么是头文件,什么又是源文件,只知道照葫芦画瓢,用 printf(“This is a C program !\n”) 打印字符串,用 scanf("%d",&num)从键盘输入,还得加上一个 #include (偶尔遇到#include "stdio.h"的时候心里还在犯嘀咕)。
在C++程序里,稍微有点变样了:
#include
using namespace std;
int main()
{
cout<<&quot;Hello,World!&quot;<<endl;
return 0;
} // Hello World 示例
刚开始,提到编程,只知道VC++6.0集成开发环境,它用起来特别方便,整个图形化的工程文件管理,一键式的编译、链接、生成可执行文件。
大二暑假在中兴软件(南昌)有限公司实习,“蝈蝈”老师给我们讲了VC++6.0中的MSDN和Debug,那是的我们才真正学会如何运用各种工具来编辑工程代码和调试程序。
看看Java的程序设计:
看吧,Java只不过是换了个编译、运行的环境,Java专用的IDE——Java虚拟机,用它开发的运用程序可以运用到Linux、Windows、Unix等系统中。
android程序是Java编写的,但程序使用的android开发的API,就是andriod的库。
上述的程序开发,都没有涉及到底层硬件结构,所以从事以上程序开发的程序员,不管你学什么专业,只要花点时间就能很快上手,有兴趣的话就可以深入探究,任何一个方向都可以的工作,都有千千万万的程序员在坚守岗位。
当涉及到硬件的时候,我们往往需要深入探究程序流程框图和其他中每条语句的执行效果。
单片机就是我们最常见的微机系统,不管是最初的4位单片机,还是我们现在用的比较多的8位51单片机、16位的凌阳单片机、还是32位的ARM架构系统,在学完基本的GPIO、定时器、PWM、中断、模数/数模转换等模块之后,总会有串口通信这个模块。只需在程序中配置好这个模块的工作模式和波特率,设定传输数据的基本格式,起始位、数据位、奇偶校验位、停止位等,它就可以按照串口通信协议实现不同设备之间的数据通信。于是乎,我们将单片机通过串口工具与PC上位机相连,当程序中执行 Uart_Printf(&quot;Hello world !\n&quot;); 语句,屏幕上的“Hello world !”又出现了。
Uart_Printf 是用户自定义的一个函数,函数体就是直接操作单片机中串口模块的发送缓冲区,由此就可以实现串口打印字符串。可是我在学习飞思卡尔的K60单片机(基于ARM-Cortex M4内核)时,看到一本由苏州大学出版的教程,里面第一个实验就是 printf(“Hello world !\n”);翻了老半天,愣是找不到 printf 的定义在哪。当然在STM32单片机的程序代码里,也能遇到相同的情况。稍微知道点单片机的童鞋就知道,单片机打印字符就是操作单片机的串口模块各种寄存器。其实这里的printf我们可以理解为,我们使用的驱动库函数(有的放在了用户工程文件夹下,有的是集成到开发环境中),这里的 printf 在集成开发环境中经过各种预编译和库函数链接,默认使用了UART0通道,启动串口发送Hex数据、字符或者字符串,其实最终还是以ASCll码的形式发送出去。
昨两天在嵌入式 Linux 系统环境下再次看到了“Hello world !”,第一个嵌入式Linux应用程序-HelloWorld 和第一个嵌入式 Linux 驱动程序-HelloWorld 。
同样是打印“Hello world !”,但一个是 Linux 系统底层的驱动程序,另一个是上层的应用程序。两个程序的文件类型不同,加载到单片机存储器上的方式和位置也不同,当然还有其他的很多不同点,有待细致比对。
耗费多日,看到“Hello world !”倍感亲切,内心还有点小激动,总算打开了我嵌入式系统程序开发的大门,哈哈!
自学不容易,到处碰壁,没人指点,只好抽空写写随笔(请原谅初学者的不专业)。急求志同道合的战友若干,一起攻克嵌入式学习的难关,也热烈欢迎各位大虾前来拍砖。
开发平台:
友善之臂的S3C2440开发板 (并参考了韦东山Linux视频)
VMware 6.0 虚拟机
Fedora 14 系统 |