嵌入式C语言重点知识点

嵌入式C语言重点知识点,第1张

嵌入式C语言重点知识点

嵌入式LINUX

嵌入式Linux 是将日益流行的Linux *** 作系统进行裁剪修改,使之能在嵌入式计算机系统上运行的一种 *** 作系统。Linux做嵌入式的优势,首先,Linux是开放源代码;其次,Linux的内核小、效率高,可以定制,其系统内核最小只有约134KB;第三,Linux是免费的OS,Linux还有着嵌入式 *** 作系统所需要的很多特色,突出的就是Linux适应于多种CPU和多种硬件平台而且性能稳定,裁剪性很好,开发和使用都很容易。同时,Linux内核的结构在网络方面是非常完整的,Linux对网络中最常用的TCP/IP协议有最完备的支持。提供了包括十兆、百兆、千兆的以太网络,以及无线网络,Token Ring(令牌环网)、光纤甚至卫星的支持。

移植步骤:

1Bootloader的移植;

2嵌入式Linux *** 作系统内核的移植;

3嵌入式Linux *** 作系统根文件系统的创建;

4电路板上外设Linux驱动程序的编写。

WinCE

WinCE是微软公司嵌入式、移动计算平台的基础,它是一个开放的、可升级的32位嵌入式 *** 作系统,是基于掌上型电脑类的电子设备 *** 作系统,它是精简的Windows 95,Win CE的图形用户界面相当出色。WinCE是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的 *** 作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。 *** 作系统的基本内核需要至少200K的ROM。

一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由WinCE系统内核映像(OS Image)和板卡支持包(BSP)两部分组成。因为WinCE系统是一个软硬件紧密结合的系统,因此即使CPU处理器相同,但是如果开发板上的外围硬件不相同,这个时候还是需要修改BSP来完成一个新的BSP。因此换句话说,就是WinCE的移植过程主要是改写BSP的过程。

Android

Android 是一个包括 *** 作系统,中间件以及一些重要应用程序的专门针对移动设备的层次结构的软件集。Android 作为一个完全开源的 *** 作系统,是由 *** 作系统Linux、中间件以及核心应用程序组成的软件栈。通过 android SDK 提供的 API 以及相应的开发工具, 程序员可以很方便的开发android平台上的应用程序。其整个系统由应用程序,应用程序框架,应用程序库,Android运行库,Linux内核(Linux Kernel)五个部分组成。Android *** 作系统内置了一部分应用程序, 包括电子邮件客户端、SMS程序、日历、地图、浏览器、通讯录以及其他的程序,值得一提的是这些所有的程序都是用java编写的。

移植的主要的工作是驱动,硬件抽象层的移植。为了更好地理解和调试系统,也应该适当地了解上层对硬件抽象层的调用情况。

TinyOS

TinyOS是一个开源的嵌入式 *** 作系统,它是由加州大学的伯利克分校开发出来的,主要应用于无线传感器网络方面。程序采用的是模块化设计,所以它的程序核心往往都很小,一般来说核心代码和数据大概在400 Bytes左右,能够突破传感器存储资源少的限制。TinyOS提供一系列可重用的组件,一个应用程序可以通过连接配置文件(A Wiring Specification)将各种组件连接起来,以完成它所需要的功能。

嵌入式实时 *** 作系统(RTOS)

在工业控制、 军事设备、航空航天等领域对系统的响应时间有苛刻的要求,这就需要使用实时系统。当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应,并控制所有实时任务协调一致运行的嵌入式 *** 作系统。故对嵌入式实时 *** 作系统的理解应该建立在对嵌入式系统的理解之上加入对响应时间的要求。

FreeRTOS

FreeRTOS是一个迷你 *** 作系统内核的小型嵌入式系统。作为一个轻量级的 *** 作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能等,可基本满足较小系统的需要。FreeRTOS任务可选择是否共享堆栈,并且没有任务数限制,多个任务可以分配相同的优先权。相同优先级任务的轮转调度,同时可设成可剥夺内核或不可剥夺内核。

FreeRTOS 的移植主要需要改写如下三个文件。

1portmacroh

2portc

3 portasm

μTenux

μTenux基于ARM微控制器平台,对uT最适用于ARM Cortex M0-M4系列的微控制器,代码开源、免费,是一个功能强大的抢占式实时多任务 *** 作系统。μTenux除具有实时嵌入式 *** 作系统的一般特性:可移植性,可固化,可裁剪等特性以外,它还具有如下优点:

(1)微内核。无MMU, ROM/RAM占用量小,所占ROM最大60KB,最小10KB;RAM最大12KB,最小2KB;

(2)开源免费;

(3)支持所有32位ARM7/9和Cortex M系列的微控制器;

(4)可配置多达到256个任务以及140个任务优先级;

(5)有良好的商业支持, T-Engine论坛进行总的维护。

移植主要包括:芯片系统时钟移植,外设移植和通用输出/输入端口的移植以及看门狗模块移植。由于考虑到内核代码的重要性以及其在整个移植中的重要意义,且为了整个系统有更好的实时性,可选用汇编语言编写 *** 作系统的启动代码。

VxWorks

VxWorks系统提供多处理器间和任务间高效的信号灯、消息队列、管道、网络透明的套接字。实时系统的另一关键特性是硬件中断处理。为了获得最快速可靠的中断响应,VxWorks系统的中断服务程序ISR有自己的上下文。VxWorks实时 *** 作系统由400多个相对独立的、短小精炼的目标模块组成,用户可根据需要选择适当模块来裁剪和配置系统,这有效地保证了系统的安全性和可靠性。系统的链接器可按应用的需要自动链接一些目标模块。这样,通过目标模块之间的按需组合,可得到许多满足功能需求的应用。

移植过程可以参考网络上一些BSP代码,BSP的英文全称为board support package,即板级支持包,它的作用是针对特殊的硬件平台,为VxWorks内核提供 *** 作的接口。

μClinux

嵌入式Linux作为一个开放源代码的 *** 作系统,以价格低廉、功能强大又易移植的特性正在被广泛应用,μClinux是专门针对没有MMU的处理器而设计的嵌入式Linux,非常适合中低端嵌入式系统的需求。 在GNU通用公共许可证的授权下,μClinux *** 作系统的用户可以使用几乎所有Linux的API函数,不会因为没有内存管理单元MMU而受到影响;而且,μClinux在标准的Linux基础上进行了适当的裁剪和优化,形成了一个高度优化的、代码紧凑的嵌入式Linux,体积小了,但是仍然保留了Linux的大多数的优点,比如稳定性好、强大的网络功能、良好的可移植性、完备的文件系统支持功能、以及标准丰富的应用程序接口API等,可以支持类似ARM7TDMI等类型多的小巧玲珑的中央处理器。

eCos

eCos中文翻译为嵌入式可配置 *** 作系统或嵌入式可配置实时 *** 作系统。适合于深度嵌入式应用,主要应用对象包括消费电子、电信、车载设备、手持设备以及其他一些低成本和便携式应用。eCos是一种开发源代码软件,无任何版权费用。 eCos最大的特点是模块化,内核可配置。如果说嵌入式Linux太庞大了,那么eCos可能就能够满足要求。它是一个针对16位、32位和64位处理器的可移植开放源代码的嵌入式RTOS。和嵌入式Linux不同,它是由专门设计嵌入式系统的工作组设计的。eCos具有相当丰富的特性和一个配置工具,后者能够让你选取你所需要的特性。

eCos的软件分了若干的模块,移植工作主要在他的hal层进行,所谓hal(硬件抽象层)就是把和硬件相关的软件凑到一起。

μC/OS-II

μC/OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。其结构小巧简洁且支持抢占式的多任务调度与管理。此实时 *** 作系统管理任务数多达64个,且提供内部程序存储器管理、系统运行时间管理、多任务实时调度与管理等功能。由于它的作者占用和保留了8个任务,所以留给用户应用程序最多可有56个任务。赋予各个任务的优先级必须是不相同的。这意味着μC/OS-II不支持时间片轮转调度法。μC/OS-II为每个任务设置独立的堆栈空间,可以快速实现任务切换。

将μC/OS-II *** 作系统移植到目标处理器上,需要从硬件和软件两方面来考虑。硬件方面,目标处理器需满足以下条件:

①处理器的C编译器能产生可重入代码;

②用C语言可以开/关中断;

③处理器支持中断,并且能够产生定时中断(通常在10~1000 Hz之间);

④处理器能够支持容纳一定量数据的硬件堆栈;

⑤处理器有将堆栈指针和其他寄存器读出和存储到堆栈或内存中的指令。

软件方面,主要是一些与处理器相关的代码移植,其分布在OS_CPUH、OS_CPU_CC和OS_CPU_AASM这3个不同的文件中。

嵌入式实时 *** 作系统VxWorks入门嵌入式 Linux 系统是标准 Linux 在嵌入式领域的延伸,其特点和功能与标准 Linux 几乎完全相同。 Linux 系统的稳定性和健壮性已经在真实世界中得到了证明,在工业控制领域也有许多非常成功的应用。但是,在针对一些有较强实时性要求的特定工业应用中, Linux 系统仍然暴露 出 了许多技术缺陷。其主要原因是因为 Linux 系统起初是为 PC 开发的,在功能和性能选择上更多的兼顾了 PC 应用的特点,追求系统的功能完备性和整体性能最优。这一点在 Linux 系统的调度策略上表现的尤为明显,如任务之间采用的是基于 分时技术 ( time-sharing ) 的调度策略,而且不支持内核态抢占式调度,这样系统就无法保证紧急任务总是会被优先执行,且调度延迟不确定,是随机可变的。

因此,有相当多机构和公司都在研究如何提高 Linux 实时性能,并取得了一些富有成效的成果。同时,开源社区也做着同样的事情,那就是 Linux 26 版本的开发。开源社区采用的实时化思想是直接对 Linux 内核的调度机制和算法进行修改和优化。 Linux 26 内核开发大约是从 2001 年开始,经过三年左右的开发,在 2004 年发布了稳定版本,经过了这几年的测试与改进,已经在桌面 PC 和服务器领域内得到了大量使用,在嵌入式系统上的应用也在不断发展中。 Linux 26 版本中与实时性相关的改进主要体现在以下几个方面。

⑴ 调度计算的分散性。 26 版本中采用了由 Ingo Molnar 实现的调度算法,该算法将进程优先级的计算分散在多处进行,而不是集中在一个统一的调度函数中,这样不仅提高了计算效率,还减小了 CPU 因集中调度计算所消耗的时间,并且使调度器的时间开销是与系统负载无关,是 O(1) 恒定的。

⑵ 抢占式内核的支持。 26 版本中提供了对抢占式内核的支持,而 24 内核是不支持内核抢占的。支持抢占式调度是实时 *** 作系统的标志之一,这也是早期 Linux 系统应用于实时应用时最为诟病的地方。

⑶ 系统同步机制的改进。 26 内核中则对系统中同步机制的使用进行了优化,大大减小了因同步机制引起的时间消耗。

⑷ 更细的时间粒度。在 26 内核中,定时器的频率被定义为 1000Hz ,而 24 内核中为 100Hz 。

虽然, Linux 26 系统仍然不是严格实时系统,但它的实时性能得到了很大提高却是个不争的事实,有关文献采用统计的方法对 Linux 26 和 24 内核中任务响应和中断响应的进行了 310 万次测试,然后对平均响应时间和最坏响应时间进行了对比,下图 (a) 和 (b) 给出了时间比较结果。从结果可以看出 26 内核的实时响应能力要远高于 24 内核,差距至少在十多倍以上。这一结果更增强了用户将 26 内核应用到各种非严格实时应用中的信心。

准备工作

我们假设您有一台普通配置的PC机,并安装了Windows2000 *** 作系统。其次您需要安装Tornado 22 for pcPentium开发环境。缺省安装的Tornado 22 for pcPentium可能不包括pcPentium的BSP组件,但该组件可以从风河公司(Windriver)的网站免费下载。

我们将在下文以WIND_BASE引用Tornado的安装路径。

其次是要安装VMWare软件,这里我们使用40的版本。如果您还没有该软件,也可以从VMWare的网站下载试用版。

最后,由于Tornado自带的PC-NET网卡驱动有问题,所以需要下载AMD的PC-NET网卡的VxWorks系统驱动,可以从AMD网站免费下载。

一张144M的软盘,用于制作系统引导盘。

准备并安装好以上软件后,就可以开始下一步的工作了。

开始安装

编译网卡驱动程序

VMWare为运行于其上的 *** 作系统提供虚拟网卡支持,该网卡类型即为AMD的PC-NET。实际上,在Tornado开发包中已经包含了该类型网卡的驱动程序,但经过测试,对于VMWare无法正常工作,所以您需要从AMD的网站下载最新的驱动程序。

下载得到的是一个可执行的安装程序,运行该程序将得到一个压缩包和一个帮助文件,按照该帮助的要求,将压缩包直接释放到Tornado目录下。如果提示是否允许覆盖文件,则选择允许。

此后按如下步骤完成驱动程序的编译和替换:

打开一个控制台窗口,运行批处理程序:$(WIND_BASE)\host\x86-win32\bin\ torVarsbat;

重新定位到$(WIND_BASE)\target\src\drv\end目录,运行:

make CPU=PENTIUM tool=gnu ln97xendo

其间会产生一些警告,但这不会影响我们的工作。

重新定位到$(WIND_BASE)\target\lib\pentium\PENTIUM\common目录,并将上一步生成的文件ln97xendo复制到此目录下。备份此目录下的文件libdrva;

运行命令arpentium -d libdrva ln97xEndo,删除libdrva中原有的ln97xEnd模块,然后再运行命令:

arpentium -ra iOlicomEndo libdrva ln97xEndo

将我们刚刚创建的新模块添加进去。

到此有关网卡驱动的设置就完成了。注意不要关闭这个窗口,后面还要使用。

修改配置文件

在这一节中,我们要修改编译VxWorks的配置头文件Configh中定义的一些参数,使编译出来的系统引导程序和VxWorks的映象符合我们的要求;同时还要修改sysLn97xEndc这个文件,以使系统的网络功能正常运行。

定位目录到$(WIND_BASE)\target\config\pcPentium并打开该目录下Configh文件;

我们首先要修改VxWorks的启动参数。先查找到定义DEFAULT_BOOT_LINE宏的地方,修改预处理条件CPU == PENTIUM分支下的定义如下:

#define DEFAULT_BOOT_LINE \

"lnPci(0,0)your_host_name:d:\\vxWorks h=19216880169 e=19216880254 u=target pw=vxworks tn=target"

其中:

lnPci(0,0)指定了使用第0个网卡和第0个处理器,lnPci这个标识会因为使用的驱动程序不同而有所不同,但这里用lnPci就可以了;

your_host_name指定您的主机的名字,使用Windows系统的主机名就可以;

d:\\vxWorks指定了VxWorks映象下载的完整路径;

h=19216880169是主机的IP地址,就是您当前正在使用的系统的IP地址;

e=19216880254是目标机的IP地址,也就是未来VxWorks *** 作系统的IP地址,您只要任意指定一个不冲突的IP地址即可,这里我们假设您的目标机IP地址和主机IP地址在同一个网段内;

u=target指定了FTP服务器的用户名,这个FTP就是用来下载VxWorks映象的,后面还会提到;

pw=vxwroks是用户名对应的口令;

tn=target指定目标机的名字,任意指定即可;

您可以参考Tornado自带的手册以获取更多信息;

下面我们要指定使用什么样的网卡驱动程序。首先查找“Network driver options”这段文字,之后您可以看到在该注释后面定义了一系列的有关网卡驱动的宏定义。注意保证INCLUDE_END和INCLUDE_LN_97X_END这两个宏处于定义状态(define),其他的宏都处于未定义状态(undef);

缺省情况下,VxWorks系统是不接受外部输入设备(如键盘)的输入,也不向外部输出设备(如显示器)输出数据。为了便于调试,我们必须改变它的这种缺省状态。我们查找定位宏INCLUDE_PC_CONSOLE,然后保证其处于定义状态(define)即可;

到此为止,对configh文件的修改就完成了,保存修改,然后再打开同一目录下的sysLn97xEndc文件;

这一步修改的目的是要使网卡正常工作。我们先定位到“memory-mapped IO base”这段文字,然后将其前面的参数由pciRsrc[endUnit]bar[1]修改为NONE,这样就可以了。最后别忘了保存。

到此为止,全部的修改工作都完成了,下一步就可以开始编译连接了。

编译程序

这一节我们要编译生成bootrom引导程序和VxWorks运行映象。

打开您的Tornado开发工具,在Build菜单下选择Build Boot ROM,d出如下对话框:

在BSP列表中选择pcPentium,而在Image to build列表中分别选择bootrom和gnu。完成选择后,点击OK按钮就开始引导程序的编译了。编译产生的文件bootrom将保存在$(WIND_BASE)\target\config\pcPentium目录下。

编译生成bootrom后,还要创建一个VxWorks映象(image),也就是VxWorks *** 作系统本身的代码。

创建一个“bootable VxWorks image”的工程;

选择您需要的VxWorks组件。这一步是可选的,如果您只想使用缺省的配置,那根本就不需要这一步;但如果您想使用额外的组件,例如,您可能想通过telnet连接VxWorks系统,这时就需要在Workspace窗口的VxWorks选项卡中选择telnet sever对应的组件,如下图:

在这个例子中我们选择了两个重要的组件:Telnet server 和 Target shell 。前者使我们可以通过Telnet协议登录到VxWorks *** 作系统中;后者则可以让我们通过命令行控制VxWorks系统。

完成选择后,即可开始编译程序;

到此我们已经生成了VxWorks的系统引导程序和运行时的代码映象。这里还要提醒读者,在您每次修改完系统的配置信息(如:configh)后,都要重新创建一个工程来编译VxWorks映象,以免出现代码不一致的问题。

将生成的名为“vxworks”的文件复制到D盘根目录下。这个路径是由上面我们所设置的DEFAULT_BOOT_LINE宏中的路径参数决定的,必须保持二者一致。

制作引导磁盘

现在开始制作VxWorks系统引导磁盘,用于引导装载VxWorks运行映象。

我们回到“编译网卡驱动程序”一节中所打开的控制台窗口,定位目录到$(WIND_BASE)\target\config\pcPentium,插入您已经格式化好的软盘,然后运行:

mkboot a: bootrom

该命令将在软盘上建立VxWorks系统引导分区,并将引导程序复制到软盘上。

这里再额外向您介绍一个虚拟软盘的工具:RamDiskNT,它可以在内存中建立一个虚拟的软盘,对于提高VxWorks的启动速度有很大帮助。

配置FTP服务器

这里的FTP服务器用于在系统成功引导后,下载VxWorks的运行时映象。我们这里使用Tornado开发环境自带的FTP服务器。

打开Tornado FTP Server,选择“Security”菜单下的“Users/Rights”子菜单,d出如下对话框:

当User Name为“target”时,修改“Home Directory”为D盘根目录(此路径由上面的DEFAULT_BOOT_LINE参数决定),同时修改口令为“vxworks”,最后点击“Done”按钮完成修改;

为了便于调试,我们还要打开FTP Server的日志功能。选择“Logging”菜单下的“Logging Options”子菜单,d出如下对话框,其中除了“Winsock Calls”外,让其他选项全都处于开启状态。

保持FTP Server窗口处于打开状态(这样FTP服务器就处于运行状态)。

创建VxWorks系统

打开您的VMWare Workstation,在File->New菜单下选择创建一个新的虚拟机(Virtual Machine),按照其向导帮助,完成虚拟机的配置。在选择 *** 作系统类型时,选择“Other”,其余选项均使用缺省值就可以了。

完成以上配置后,点击右侧窗口中的“Start this virtual machine”,系统即开始引导运行,如下图所示:

在引导过程中,您会遇到一个7秒钟的等待,以决定是使用缺省的引导参数,还是手动输入引导参数。这里我们选择前者,所以不需要做任何工作。

成功引导后,系统会自动从FTP Server下载映象,并开始运行,得到如下画面:

到此,我们已经成功的在VMWare上安装了VxWorks *** 作系统。

需要注意的是,上面的画面会因为选择组件的不同而略微有所不同(例如,如果您没有选择target shell,就不会出现命令行提示符),但一般不会影响后续 *** 作。

配置联机调试环境

装好系统后,您肯定还希望将自己编写的应用程序下载到目标机进行调试,下面我们就完成这一部分的配置工作。

打开您的Tornado开发环境,选择“Tools->Target Server->Configure”菜单,d出如下对话框:

在“Description”中任意填写一个名字,这里是“net00”;在“Available Back”中选择“wdbrpc”,并在下面的IP地址框中填写目标机的IP地址,这里是“19216880254”(由DEFAULT_BOOT_LINE参数决定);将“Target Server Properties”下拉框更改至“Core File and Symbols”,并在“File Path”一项中选择您的映象的完整路径,这里是“D:\vxWorks”(由DEFAULT_BOOT_LINE参数决定)。

完成以上两项配置,点击“Launch”按钮,就可以启动Target Server了。

再回到Tornado开发环境,在工具条上的Target Server下拉框列表中选择“19216880254@your_host_name”。这时您会发现工具条中一些原先处于“禁用”状态的工具按钮,现在都已经处于“激活”状态了。

现在您就可以开始联机调试您的VxWorks应用程序了。

以上就是关于嵌入式C语言重点知识点全部的内容,包括:嵌入式C语言重点知识点、在vxworks中,period命的具体用法是怎样的、如何在VMWare上安装VxWorks *** 作系统等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9731221.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存