微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > eCos嵌入式操作系统构建

eCos嵌入式操作系统构建

时间:05-10 来源:互联网 点击:

件以及.ldi文件和mlt文件。手工修改时只需修改.h文件和.ldi文件,并保证两个文件同步修改。修改的主要内容有ROM的起始地址、ROM的大孝RAM的起始地址和RAM的大校

⑤ 修改平台的io宏定义。在include/plt_io.h文件中完成对平台的各种IO宏定义,包括各种CPU的系统配置寄存器、内存配置寄存器、串口配置寄存器、LCD配置寄存器、以太网配置寄存器等的I/O地址。

⑥ 修改平台的Cache代码。在include/hal_cache.h文件中修改有关Cache的宏定义。在开发初期,最好先将Cache关闭,等移植稳定后再打开。

⑦ 实现简单的串口驱动程序。串口的初始化、接收和发送在src/hal_diag.c文件完成。主要的函数如下:

cyg_hal_plf_serial_init_channel(),完成对某个串口的具体初始化工作;

cyg_hal_plf_serial_putc(),从串口发送一个字符;

cyg_hal_plf_serial_getc(),从串口接收一个字符;

cyg_hal_plf_serial_getc_nonblock(),以无阻塞的方式接收一个字符,即缓冲区中无数据时立即返回;

cyg_hal_plf_serial_isr(),串口中断服务程序;

cyg_hal_plf_serial_init(),调用cyg_hal_plf_serial_init_channel()函数初始化各串口,并向内核注册串口中断服务程序、串口的读写例程和配置例程。

⑧ 修改或增加平台初始化程序。平台初始化在3个文件文件中完成:src/s3c44b0_misc.c、include/hal_platform_setup.h和include/hal_platform_ints.h。

hal_platform_ints.h完成系统的中断宏定义。在不同的平台中设备数量和类型不同,中断的译码方式也不一致,需要根据具体情况作出调整。

hal_platform_setup.h主要完成系统硬件的初步配置,这里一般要在看门狗和中断关闭后,配置系统时钟频率、ROM和RAM的初始化参数。

s3c44b0_misc.c文件完成目标板的进一步初始化、中断处理、延时例程和操作系统时钟设置。

经过以上修改,底层的平台抽象层就基本完成了,这时可用eCos的配置工具生成RedBoot进行测试。

RedBoot测试成功后,说明平台已经能正确完成初始化操作,且串口驱动也能正常工作,接着要完成中断和Cache等测试工作。可利用一些多线程的小程序测试,检测时钟配置是否正确,同时也检测了中断能否正常工作。5 驱动程序设计

平台抽象层完成后,接着要完成系统的设备驱动程序。eCos设备驱动程序的中断模块分为三个层次:中断服务程序ISR、中断滞后服务程序DSR和中断线程。ISR在响应中断时立即调用,DSR由ISR发出调用请求后调用,而中断线程为驱动程序的客户程序。

硬件中断在最短的时间内交付给ISR处理。硬件抽象层对硬件中断源进行译码并调用对应的中断ISR。ISR可以对硬件进行简单的操作,应使ISR的处理时间尽量短。当ISR返回时,它可将自己的中断滞后服务程序DSR放入操作系统的任务调度中,DSR可以在不妨碍调度器正常工作时安全运行。大多数情况下,DSR将在ISR执行完成后立即运行。

eCos设备驱动程序一般可分为三个部分,如图2所示。

eCos的所用设备驱动程序都使用设备表入口来描述。使用宏DEVTAB_ENTRY()可生成设备表入口。其格式为:

DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)。

l:设备表入口的“C”标识符。

name:该设备的“C”字符串名字,在搜索设备时用到。

dep_name:对于一个层次设备,此参数是该设备下层设备的“C”字符串名字。

handlers:I/O函数句柄指针,由宏DEVIO_TABLE实现的。

init:当eCos处于初始化阶段时被调用的函数,该函数可以进行查找设备,对硬件进行设置等操作。

lookup:当调用cyg_io_lookup()函数对该设备进行操作时调用的函数。

priv:该设备驱动程序所需的专用数据。

设备入口中的句柄handlers包含了一组设备驱动程序接口函数,是设备函数表DEVIO_TAB的指针,DEVIO_TAB包含了一组函数的指针。设备I/O函数表通过DEVIO_TAB宏来定义,格式如下:

DEVIO_TABLE(l, write, read, get_config, set_config)。

l:改表的“C”标识符,即在DEVTAB_ENTRY中的handlers。

write:实现向设备传送数据。

read:实现从设备读取数据。

get_config:实现读取设备配置信息。

set_config:实现对设备的配置操作。

在eCos的初始化引导过程中,对系统中的所有设备调用其相应的init()函数(即DEVTAB_ENTRY宏注册的初始化函数),所有对设备的I/O操作通过handlers完成。

设备驱动程序包含如下内容(xxx:表示某种设备)。

◆ 用宏定义DEVIO_TABLE设备I/O函数表。

DEVIO_TABLE(xxx_handlers, // I/O函数句柄指针

xxx_write, // 写函数

xxx_read, // 读函数

xxx_get_config, // 读配置

xxx

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top