微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于ARM7支持触摸屏和实时操作系统的开发与应用

基于ARM7支持触摸屏和实时操作系统的开发与应用

时间:03-06 来源: 点击:

d参数,进行X、Y向触摸点选择、去抖、位置的计算等

  return ack;//返回触摸屏对应位

  置值;

  }

  mC/GUI及与操作系统的接口

  mC/GUI是运行于操作系统之上的程序,它既需要与操作系统协调,又需要与各种输入/输出设备协调,即通过输入设备接收用户请求,通过输出设备发送微处理器的处理结果。因此,mC/GUI的接口主要包括两个:与操作系统的接口和与输入/输出设备的接口,这也正是在移植mC/GUI的过程中所要解决的关键问题。mC/GUI与mC/OS-II结合应用时通过上锁和解锁来解决资源互斥的问题,其过程是通过在关键区域入口设置GUI_X_Lock()以获得专一访问权,用完后在出口处设置GUI_X_Unlock()让出资源,达到多个GUI任务对同一数据在关键区域内访问的互斥。

  在mC/GUI移植到mC/OS-II的过程中,需要利用操作系统的资源来实现GUI所需要的功能,即利用μC/OSII提供的时间管理、任务管理和资源共享机制来实现μC/GUI中相应的功能,具体要实现以下函数的重新定义:

  (1)时间函数

  GUI_X_Delay() //延迟指定的时间段后返回

  GUI_X_ExecIdle() //视窗管理器的非堵塞函数调用

  GUI_X_GetTime() //返回当前

  系统的时间,以毫秒为单位

  (2)内核接口函数

  GUI_X_InitOS() //初始化内核

  接口模块

  GUI_X_GetTaskID() //返回一个

  当前任务/线程唯一的32位标识符

  GUI_X_Lock() //给GUI上锁

  GUI_X_UnLock() //解锁GUI

  GUI_X_Log() //返回调试信息

  (3)LCD底层驱动程序

  要使mC/GUI能够在目标系统上运行,首先要对mC/GUI进行配置和修改,也就是移植。移植工作主要是指对配置头文件中的宏定义根据具体情况进行修改,包括LCD宏和LCD控制器宏。使用mC/GUI库函数时,必须在主函数前调用头文件"gui.h",并根据需要做适当的修改。值得注意的是,在此文件的预定义语句中,必须将GUI_SUPPORT_TOUCH设为1。如果需要在屏幕上显示中文,除了添加中文字库到工程中外,还需要将GULDEFAULT_FONT设为&GULFontHZ12,HZ12代表使用的中文字体。如果需要在mC/GUI的控件中使用中文,也需要在控件的预定义语句中作相应的修改。由于ARM7芯片S3C44B0X内部集成了LCD控制器,LCD底层驱动程序主要是设计与LCD屏相关的参数以及其特殊的控制寄存器,主要包括以下的参数和寄存器:

  #dene SCR_XSIZE (640)

  //LCD水平尺寸

  #dene SCR_YSIZE (240)

  //LCD垂直尺寸

  #dene LCD_XSIZE (640)

  //LCD水平分辨率

  #dene LCD_YSIZE (240)

  //LCD垂直分辨率

  #define ARRAY_SIZE_COLOR (SCR_XSIZE/1*SCR_YSIZE)

  //LCD水平与垂直比例

  #define HOZVAL_COLOR (LCD_XSIZE*3/8-1)

  //LCD水平字节尺寸

  #dene SCR_XSIZE (640)

  //LCD水平尺寸

  #dene SCR_XSIZE (640)

  //LCD水平尺寸

寄存器的定义根据不同的微处理器和LCD颜色、尺寸等来定义,这里以S3C44B0X说明:

  rLCDCON1=(0)|(2<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_COLOR<<12);

  rLCDCON2=(LINEVAL)

  |(HOZVAL_COLOR<<10)|(10<<21);

  rLCDSADDR1= (0x3<<27)|(((U32)frameBuffer>>22)<<21)|M5D((U32)frameBuer>>1);

  rLCDSADDR3= (LCD_XSIZE/2)|(((SCR_XSIZE-LCD_XSIZE)/2)<<9);

  嵌入式操作系统下应用程序的开发

  在嵌入式操作系统下开发基于ARM7的应用程序主要是进行任务的划分,根据每个任务的紧急程度建立不同优先级,下面就任务划分的原则和实例进行说明:

  任务划分原则

  将一个软件系统分解成并行任务时,主要考虑系统内功能的异步性。通过分析数据流图中的变换,确定哪些变换是并行的,哪些变换本质上是顺序执行的。通过这种方法,一个变换对应一个任务,或一个变换包括几个任务,同时应遵循如下原则:

  ● I/O依赖性:由于I/O速度的限制,对它操作的程序应独立为一个任务;

  ● 时间关键性:将有时间关键性的功能分离出来,组成独立的任务,赋予高优先级;

  ● 计算功能:计算功能要占用较多CPU时间间,应赋予他们较低的优先级;

  ● 功能内聚:将紧密相关的功能组成一个任务,使各种功能共享资源或相同事件的驱动;

  ● 时间内聚:将在同一时间内完成的任务,即使功能不相关,组成一个独立的任务;

  ● 周期执行功能:相同周期内执行的各功能组成一个任务,频率高的赋予高优先级。

  应用实例

  本文以实际项目为例进行分析,在本项目中触摸屏作为输入设备、系统检测输出窗口,通过控制器嵌入mC/OS-II操作系统和mC/GUI配合使用实现完成相应按钮指令的功能,并在后台的特定任务中完成各种中断、计算、通讯等功能。因此进行了如表1所列的任务划分和定义。

触摸屏的应用程序可以根据触摸屏的实际使用情

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

网站地图

Top