嵌入式系统开发过程中的常见问题

开发
嵌入式操作系统(Embedded Operation System,EOS)是一种用途广泛的系统软件,过去它主要应用与工业控制和国防系统领域。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化以及应用的专用性等方面具有较为突出的特点。本文列举了嵌入式系统开发过程中的几个常见问题,希望能够在大家的学习过程中提供些许帮助。

  嵌入式系统开发过程中的常见问题

  Bootloader如何写入Flash ?

  初学者一般都会遇到如何将程序写入处理器的问题。对于不同的处理器,可以采用不同的方法。例如Intel的Xscale处理器可以使用Intel公司提供的JFlash工具烧写。对于具有JTAG 调试工具软件的处理器,可以使用如下思路:编写一段程序,这段程序能将位于SDRAM/SRAM 固定地址中的数据写入Flash 中。烧写时,首先,将这段软件下载到SDRAM 中,然后通过调试软件将要写入Flash的数据下载到S D R A M / S R A M 的某个固定地址开始的缓冲区,然后通过调试器开始执行程序,将数据写入Flash。除此以外,网络上还提供了很多专用的写Flash的工具,开发者可以根据自己的需要选用。(现在明白了我在学的那个BF533为什么先下个flashProgramer.dxe先了)

  什么是arm-elf-gcc?

  arm -elf-gcc是一个交叉C语言编译器。我们在PC平台下编译程序,编译器运行的处理器同生成的代码将要运行的处理器相同。但是,在PC 机上编译arm 程序时,编译器运行的处理器同生成的代码运行的处理器不同,这种编译器叫做交叉编译器。其中的elf是指编译器生成的目标文件格式。(其实我们平时用的单片机编译器如GCC—AVR等已是交叉编译器了,我到现在才弄清楚什么是交叉编译器)

  走了哪条编译路径?

  系统程序和驱动程序往往包含很多的编译选项,很多选项都是在编译时通过命令行定义的,如果想知道编译的是那一段程序可以使用如下的方法:

  1. #ifdef PLAT_AAA  
  2. #error Code for Platform AAA  
  3. #else  
  4. #error Code NOT for Platform AAA  
  5. #endif 

  这样在编译的时候就知道,编译的是哪一条路经了。对于支持#pragma message( “I am here”)的编译器也可使用#pragma message预编译指令。

  我怎么知道那段代码在那个文件中?

  系统编程中经常需要使用在多个文件中搜索字符串,在windows平台下可以使用平台提供的多文件字符串搜索工具。在linux平台下,可以使用grep来搜索字符串。Grep 的搜索功能十分强大,支持正则表达式搜索,熟练使用grep对于阅读系统和驱动程序代码是很有帮助的。

  系统是从那个文件开始运行的?

  对于W i n d o w s C E 系统,一般从W I N C E 4 2 0 \PLATFORM\YourPlatform\KERNEL\HAL 目录的某个汇编文件中。对于Linux 系统版本不同会存在一定差异,以arm处理器为例,一般会在linux2.4.x\arch\arm\kernel的head-armv.S中。

  程序执行到了那里?

  可以在程序中插入如下代码来实现

  1. printf( “I am here %s, %d\n”,__FILE__, __LINE__); 

  代码将打出printf语句所在的文件名和行号。

【编辑推荐】

  1. 嵌入式系统的开发流程简要概括
  2. 嵌入式系统和嵌入式操作系统的概念
  3. 嵌入式系统软件中的质量保证
  4. 热点:如何平衡嵌入式系统中内存的成本和效能
  5. 嵌入式系统开发学习如何起步、如何深入?
责任编辑:韩亚珊 来源: 中国IT实验室
相关推荐

2010-04-06 17:26:26

Windows Pho

2010-08-10 15:09:55

Flex开发

2011-01-06 15:11:09

嵌入式linux

2010-09-27 13:45:38

2010-03-04 09:54:24

Android开发

2015-09-10 09:55:36

移动web开发问题

2009-06-17 14:33:08

java项目开发

2009-12-16 10:08:07

2011-07-06 16:00:28

ASP

2009-06-17 16:10:37

Java网站优势

2016-12-27 09:24:13

Python系统开发

2012-08-02 11:47:38

绑好鞋带 嵌入式系统开

2011-05-13 14:56:44

SybaseOracle

2015-09-25 10:02:52

BlocksDelegates开发

2010-06-09 18:04:26

2009-11-23 20:39:21

ibmdw敏捷开发

2011-01-26 09:40:42

.NET开发

2009-06-10 15:36:25

ubuntu netb开发过程

2016-12-30 11:10:32

Hadoop开发JVM

2011-01-14 13:13:23

嵌入式Linux开发
点赞
收藏

51CTO技术栈公众号