图3-3
2).任务间的通信
在μC/OS-II中,有多种方法可以保护任务之间的共享数据和提供任务之间的通信,下面介绍三种:
一是利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时,可以采用这种方法。
二是利用函数OSSchedLock()和OSSchedUnlock()对任务调度函数上锁和开锁,禁止任务调度。用这种方法也可以实现数据的共享。
三是任务间的通信和同步采用信号量、邮箱和消息队列来实现的。
3).内存管理
采用把连续的大块按分区来管理。每个分区中包含有正整数个大小相同的内存块,μC/OS-II对malloc()和free()函数进行了改进,使得它们可以分配和释放固定大小的内存块。用户的应用程序可以从不同的内存分区中取得不同大小的内存块,但是特定的内存块在释放时必须重新放回它以前所属于的内存分区。采用这种内存管理方法,解决了内存碎片问题。
主要相关函数:建立内存分区(OSMemCreate()),分配内存块(OSMemGet()),释放内存块(OSMemPut())。
4). 时间管理
μC/OS-II要求用户提供定时中断来实现延时与超时控制等功能,这个定时中断成为时钟节拍,它一般每秒发生10至100次,时钟节拍的频率越高,系统的负荷越严重。其实际大小可由用户的应用程序来决定。时间管理主要是完成任务的延时及系统时间的更改。
3.1.2.3针对应用对内核进行的扩充
由于μC/OS-II仅是一个实时内核,不像其它的实时操作系统那样提供给用户的只是一些API函数接口,把它移植到目标硬件平台只是系统设计工作的开始,还需要针对实际的应用需求对其进行功能扩展,包括底层的硬件驱动、文件系统、用户图形接口(GUI)、网络功能等,从而建立一个实用的RTOS。下面仅对外设及驱动程序进行论述。
外设驱动程序可以对系统提供访问外围设备的接口,把操作系统(软件)和外围设备(硬件)分离开来。当外围设备改变的时候,只需更换相应的驱动程序,不必修改操作系统的内核以及运行在操作系统的软件。下面仅建立用到的外设驱动程序标准接口。
⑴ 串行口(UART)
串行口符合RS-232标准,通信的最高速度可以达到115200bps。建立的接口函数如下:
Uart_Init
定义:void Uart_Init (INT16U mclk, INT16U baud);
功能:初始化串行口,设置串行口通信的波特率
参数说明:
mclk:系统的主时钟频率。
baud:所设定的串行口通信波特率
Uart_SendStr
定义:void Uart_SendStr(char * str,…..);
功能:输出字符串到串口
参数说明:
str:输出到串行口的字符串。
Uart_Getch
定义:char Uart_Getch();
功能:接收串口的数据,收到数据时返回,返回串口接收到的数据。
Uart_Sendch
定义:void Uart_Sendch(char data)
功能:向串口发送数据
参数说明:
data:发送的数据
⑵ 液晶显示驱动程序
系统设计中选用的LCD是北京精电蓬远显示技术公司生产的MGLS-12864,内部有控制电路,在系统的内存里开辟了一块内存作为液晶屏显示的后台缓冲区LCDBuffer,用于保存要显示的内容。对于不同的液晶屏显示只需要改动LCD128.C和LCD128.H中的程序即可。
液晶模块有两种工作模式:图形方式和文本方式。在图形方式下,模块上的缓冲区映射的是液晶屏上显示的图形点阵;在文本方式下,模块上的缓冲区对应的是液晶屏上显示的文本字符,包括英文字符和英文标点符号。在此对汉字显示仅作演示之用。
液晶屏的操作主要包括:初始化、设置工作模式(文本或者图形)、更新显示。接口函数如下:
LCD_Init
定义:void LCD_Init(void);
功能:初始化LCD,在系统启动时此函数被调用。
LCD_Pritf
定义:void LCD_Printf(char *str,…);
功能:在LCD的文本方式下输出字符串。
参数说明:
str:所输出的字符串
LCD_ChangeMode
定义:void LCD_ChangeMode( INT8U mode);
功能:改变LCD的工作模式
参数说明:
mode: 设定的LCD的显示模式,0 表示文本模式, 1 表示图形模式
LCD_Refresh
定义:void LCD_Refresh (INT8U col,INT8U row ,char *str )
功能:更新LCD的显示,把后台缓冲区LCDBuffer[][]中的内容更新到LCD的显示屏上。
参数说明:
col: 显示字符串的起始列数。
row: 显示字符串的起始列数。
str: 需要显示的内容
⑶ 键盘驱动程序
键盘的相关驱动函数如下:
GetKey
定义:INT8U GetKey ( );
功能:获得被按下的键数,返回值中指示出哪个键被按下。
GetScanKey
定义:INT8U GetScanKey ( )
功能:对各个按键进行扫描,从而确定其状态。相应位指示其是否被按下(1 表示按下,0表示断开)。
⑷ A/D驱动程序
系统中采用20位模数转换器LTC2430,完成对温度信号的测量,将模拟信号转换成相应的数字信号之后,传给处理器进行相关的处理。根据其转换特性,设计的函数接口如下:
2430_Check
定义:INT8U 2430_Check ( );
功能:检查本次模数转换是否完成。返回值为0时,正在进行转换,否则转换结束。
2430_ReadValue
定义:INT16U 2430_ReadValue ( )
功能:读取转换结果并返回其值。
3.2嵌入式系统软/硬件协同设计技术
传统的嵌入式系统的设计方法如图3-4所示,硬件和软件的分为两个独立的部分,有硬件工程师和软件工程师按照拟定的设计流程分别完成。这种设计方法只能改善硬件/软件各自的性能,而有限的设计空间不可能对系统做出较好的性能综合优化。20世纪90年代初,国外有些学者提出“这种传统的设计方法,只是早期计算机技术落伍的产物,它不能求出适合于某个专用系统
首页 上一页 5 6 7 8 9 10 11 下一页 尾页 8/20/20
嵌入式系统在多点温度控制中的应用(八)由毕业论文网(www.huoyuandh.com)会员上传。