文档详情

嵌入式系统C语言编程的方法的研究.doc

发布:2018-10-14约3.58千字共9页下载文档
文本预览下载声明
嵌入式系统C语言编程的方法的研究   摘要:嵌入式系统是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高。特别是随着消费家电的智能化,嵌入式更显重要。未来的物联网时代,射频识别技术都是基于嵌入式的基础上在互联网上完成的一个通信技术。   关键词:嵌入式系统;C语言;编程思维   中图分类号:TP312文献标识码:A文章编号:1672??7800(2011)02??0063??02         作者简介:赵兵(1976-),安徽怀远人,淮北煤炭师范学院讲师,研究方向为数据通信与计算机网络;孙梅(1977-),女,安徽合肥人,硕士,淮北煤炭师范学院讲师,研究方向为数据通信与计算机网络。1嵌入式系统C语言编程思维   一般形式的软件编程不同于嵌入式系统C语言编程,嵌入式系统编程建立在特定的51单片机、ARM芯片、DSP数字处理芯片等硬件平台上,所以要求其编程语言具有较强的硬件操控能力。汇编语言是最接近于机器语言的一种编程语言。但是,由于汇编语言结构的复杂性,且移植到不同的硬件平台,所以它并不是嵌入式系统开发的一般选择。而与之相比,C语言是一种最接近机器语言的高级语言,称之为嵌入式底层硬件开发的最佳编程语言。   在了解嵌入式系统构成的基础上,嵌入式C语言的编程要注意以下几个方面:   1.1程序模块化    是指怎样合理的将一个很大的工程文件划分为一系列功能独立的各个模块进行编程、编译、调试。C语言是一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论)来划分,C语言程序模块化设计需要涉及的概念:①一个程序文件(.c文件)和一个库文件(.h)文件的合成一个模块,头文件(.h)中是对于该模块软硬件接口的声明;②某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;③以static关键字声明的变量,是模块内的函数和全局变量,需在.c文件开头;④只有在汇编中,才可以认为定义变量和声明变量的区别在于定义会产生内存分配的操作,所以,禁止.h文件中定义变量。   1.2任务模式选择   所谓任务模式选择,就是单任务还是多任务的选择。“单任务系统”是指该系统模式下,不能支持在同一时刻下的多任务并发操作。在计算机编译原理中,也介绍过,计算任务的执行,可以认为是宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上是串行)地“同时”执行多个任务。多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS的核心是系统调度器,它使用任务控制块(TCB)来管理任务调度功能。   嵌入式多任务OS的典型例子有Vxworks、ucLinux等。嵌入式OS并非遥不可及的神坛之物,我们可以用不到1000行代码实现一个针对80186处理器的功能最简单的OS内核,作者正准备进行此项工作,希望能将心得贡献给大家。   1.3单任务模式程序   (1)从MCU复位(reset)时的指定地址开始执行;   (2)跳转至汇编程序startup处执行;   (3)跳转至用户主程序main函数执行,在main从上而下顺序执行:①初始化(驱动程序)各硬件设备;②初始化(各接口程序)各软件模块;③进入死循环(无限循环),调用各模块的处理函数   while(1) { }   也可利用无条件循环这样写:   for(;;){}   用户main函数和各模块的处理函数都以C语言完成。用户main函数最后都进入了一个死循环,这也是一个可选方案。   1.4中断服务程序   中断是嵌入式系统中重要的组成部分,它规定了一个硬件在规定的条件下,跳转到其他子函数执行其他优先级高的任务。但是在标准C中不包含中断。因此许多编译开发商在标准C上增加了对中断的支持。当一个函数被定义为ISR的时候,编译器会自动配置程序所需要的函数的堆栈。   在下面的一个队列,将中断类型添加到队列中时,在main函数的执行过程中,主程序死循环中不断扫描该程序是否有中断,有则取出中断函数,进行相应的处理。   在下面的一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理。   /* 存放中断的队列 */   typedef struct tagIntQue   {   int intType; /* 说明类型 */   struct tagIntQue *next;   }IntQueue;   IntQueue lpIntQueHead
显示全部
相似文档