基于Atmel-View的电子相框实现
4 Nucleus操作系统的嵌入
Nucleus Plus是美国源代码操作系统商ATI公司推出的新一代嵌入式操作系统,属于抢先式实时多任务操作系统内核, 95%的代码使用ANSI C编写,非常便于移植于各种处理器家族。在通讯、国防、工业控制、航空/航天、铁路、网络、POS、自动化控制、智能家电等领域的广泛应用。
Nucleus Plus通常作为一个C 库文件实现。实时的Nucleus Plus应用被链接到Nucleus Plus库。目标文件可以下载到目标机,或者放到ROM 里。在一个典型的目标环境,假设所有服务被应用,Nucleus Plus指令集的二进制映象文件需要大概20K 字节的内存。
总的来说,Nucleus Plus极大的提高了实时应用程序的开发工作。这些可以转变成更低的开发投资和更短的开发周期。自从Nucleus Plus支持应用程序移值到新的处理器系列上以来,应用的开发投资已经被保障了。
4.1多任务系统的实现
Atmel-View实质上还是一个单任务的嵌入式定制系统,现有功能的运用主要基于串行运行。但随着应用的深入功能模块的扩展,单任务系统逐渐显得力不从心。
蓝牙模块的运行需要多任务系统的支持,在蓝牙服务的开启状态下,需要不断监听无线请求,在接受到蓝牙传输请求后进行传输处理。使用单任务方式来支持蓝牙服务的监听显然是不合理的,那样Atmel-View将停止运行其功能。
本设计使用Nucleus Plus提供系统级的多任务调度,将Atmel-View模块和蓝牙模块作为同等的任务进行加载运行。选择Nucleus Plus作为任务调度系统,在于其易用性、代价小、嵌入式特性。
4.2 初始化
INT_Initialize 子程序在Nucleus Plus系统中是最先运行的。对大多数的目标环境,硬件复位向量必须包含在INT_Initialize 地址中。INT_Initialize 负责所有与目标硬件相关的初始化。与目标硬件相关的初始化通常包括设置不同种类的处理器控制寄存器,中断向量表,全局的C 数据元素,一些Nucleus Plus变量和系统堆栈指针。当INT_Initialize 完成,控制转移到高级Nucleus Plus初始化子程序INC_Initialize上。注意控制不会返回INT_Initialize。
INC_Initialize 调用每个Nucleus Plus组件的初始化子程序。在所有Nucleus Plus初始化完成之后,INC_Initialize 调用用户供应的初始化子程序Application_Initialize。
Application_Initialize 子程序负责定义初始化应用环境。初始化应用任务,邮箱,队列,管道,信号量,事件集,内存池和其他Nucleus Plus对象都在子程序中被定义。在Application_Initialize 返回后,INC_Initialize 开始初始化任务调度表。
4.3 任务
任务就是目的明确的半独立程序段。大多数现代实时应用都要求多任务。另外,这些任务的重要等级经常变化。管理这些竞争、实时任务的运行是Nucleus Plus的主要目的。每个任务都有五种状态:运行、就绪、挂起、中止、完成。
4.4 任务通信与同步
Nucleus Plus 为通信目的提供邮箱(mailbox),队列(queues),管道(pipes)。邮箱,队列,管道是独立的公共设备。任务之间和其他系统设备之间的联系由应用程序确定。这些通信设备之间主要的差别是数据通信的类型。在Atmel-View模块和蓝牙模块的进程间通信方式,这里选择使用队列和信号量来实现。
4.4.1 队列的应用
在菜单系统的应用中,需要加入对蓝牙模块的支持。除了构建蓝牙设定菜单外,在蓝牙进程开启并实时运行的状态下,需要通过队列方式的进程间通信来获取蓝牙进程的传输请求状况。当传输请求发生后,菜单系统将及时进行反应,提示用户当前处于蓝牙传输过程并且程序阻塞于此。当传输结束后,同样通过队列消息来得到通知,继续菜单系统的程序逻辑。
蓝牙进程进行蓝牙传输服务的监控工作,一旦外部传输请求发生,蓝牙进程将通过调用BTUI_UpdateResponse函数来通知Atmel-View任务,并开始数据接收写入工作。此函数主要是作为蓝牙任务端响应蓝牙传输相关事件,进而与Atmel-View进行及时有效的沟通、协调工作。当蓝牙任务端事件响应时,就调用NU_Send_To_Queue函数,将信息传递到队列Task_bt_queue中。
在MenuMode进行完初始界面绘制后,即刻开始不断监听与蓝牙模块共享的队列Task_bt_queue,在调用函数NU_Receive_From_Queue接收到蓝牙传输请求后,即弹出信息框通知用户蓝牙传输进行中,同时关闭影响蓝牙传输的红外接收并设置蓝牙传输状态为TRUE,以避免按键处理模块的进行。如此,程序将在蓝牙传输期间不断进行while循环随时监听Task_bt_queue的新信息情况。直至接收到来自蓝牙模块的传输完毕信息,标识着蓝牙传输工作的完毕,则更新显示区,重开启红外接收并将蓝牙传输状态设为FALSE以让按键处理模块重新进行。
4.4.2 Semaphore的应用
Nucleus Plus 提供信号量(semaphores),事件集(event groups)和信号(signals)解决信号同步问题。信号量和事件集都是独立的,公用的设备。任务和其他系统设备的联系由应用程序决定。在Atmel-View模块和蓝牙模块的进程间同步方式,这里选择使用信号量来实现。
在Atmel-View的UI应用中,加载媒体文件访问存储卡在所难免,而蓝牙模块的传输工作也将把接收到的文件写入存储卡中。在蓝牙进程和Atmel-View进程同时访问存储卡设备时,由于资源重入的不支持将导致资源冲突程序瘫痪的发生。因而,这里使用Nucleus的Semaphore来解决资源竞争问题。
声明了NU_SEMAPHORE变量后,此变量将在Atmel-View进程和蓝牙进程间共享,在访问冲突资源的时候,调用NU_Obtain_Semaphore和NU_Release_Semaphore函数来将资源访问模块包住,从而保证在得到Semaphore后,直至释放Semaphore前,资源访问都是安全的,因为另一正要访问此资源的进程将由于得不到唯一的Semaphore而暂时被自动悬挂起来。
5总结展望
随着电子相框市场的日趋成熟,技术的不断发展,功能模块日益增多,系统架构也变得越发复杂。这使得软件产品的可用性、易用性、友好性显得更为重要起来,UI的设计实现是否合理将直接影响这些因素。
市面上流行的不少电子相框的UI设计存在着架构简陋、复用性差、可扩展性差的问题。本论文的方案主要基于Atmel-View,完成了一套层次化、结构化、易扩展的菜单系统,实现效果良好。并嵌入Nucleus Plus操作系统,实现了菜单系统和蓝牙模块间的进程通信和同步,有效得支持了蓝牙模块。
电磁炉相关文章:电磁炉原理
评论