一种基于monitor的系统软件架构
来源:互联网 发布:小升初辅导软件 编辑:程序博客网 时间:2024/05/16 08:54
一种基于monitor的系统软件架构
1、Hardware物理层
提供硬件电路接口
2、boot引导层
BOOT程序从POS的FLASH运行起来,初始化cpu,初始化内存,完成从PC LoadTool下载monitor等功能后,BOOT程序把监控程序从FLASH读到SDRAM中,然后跳转到SDRAM中运行。初始化设备,启动Monitor。(蓝字部分纯属杜撰)
3、Monitor监控层
监控系统提供系统控制和管理功能,这些功能可以由系统事件触发,如果没有系统事件,监视器将直接运行多任务程序管理器,如果没有多任务程序管理器,监控器将运行第一个应用程序,如果没有任何应用程序,将运行监控管理菜单。
监控程序通过MMU把SDRAM和FLASH的地址进行交换,并实现对绝大多数存储区域的读写保护。
在P80中,通过MMU把4GB的内存分为4096个段,每个段1M字节,用4个字节的描述符来描述,这样描述符表会占用16K的存储空间,在描述符表中可以对每个段进行读写权限的控制。
由于监控程序在设置好MMU后,应用程序和其他驱动程序都不需要对P80的内存重新映射,因此在监控程序中MMU的处理部分不对其他的模块提供接口,只在监控程序初始化时设置好就可以了。
内存管理
为了软件能高速地运行,必须把SDRAM的地址通过MMU映射倒0地址处,FLASH的地址映射到0x30000000处,也就是说把SDRAM和FLASH的地址交换一下。对于其他的BANK则保持虚拟地址和物理地址一致。
我的理解是系统引导加载时频繁使用物理内存的FLASH段,物理内存地址初始化时FLASH段在低位,提高代码效率。等到多任务应用时,频繁使用虚拟地址的SDRAM地址,此时虚拟地址把SRAM地址设在低位。同时将多应用程序、PED KEY、库API ,隔离。
物理地址 虚拟地址
栈管理
经典ARM的六类异常。
IRQ_Stack, 0x40001000 /* 4 K */
SVC_Stack, 0x200000 /* 256K Code: 0x000000 - 0x1A0000 */
USR_Stack(SYS_Stack),0x600000 /* 512K MAPP Code:0x200000 - 0x300000 */
/* SAPPCode: 0x300000 - 0x580000 */
ABT_Stack, SVC_Stack
UND_Stack, SVC_Stack
FIQ_Stack, 禁止
中断管理
ARMCPU的中断向量表的内容包含的不是中断处理函数的地址,而是一组跳转指令,因此其向量表的处理和P60-1/P70-S有很大的差别。中断向量表管理模块提供一组中断向量设置函数,在监控程序运行的初始阶段调用这些设置函数设置适当的中断处理函数。需要注意的是:中断向量的处理函数要求要有很高的效率,因此最好是汇编语言的。(中断向量表提供指向各个中断子函数的的地址,触发中断的程序只有一个跳转该地址的指令,效率高,利于中断的快速响应)
CPU级中断
系统定时器:TIMER4
打印机: TIMER2,TIMER3,SPI1
蜂鸣器: TIMER0(不产生中断)
串口: UART0,UART1,UART2
MODEM: TIMER1
外设级中断
磁卡: 4个外部中断
IC卡: SPI2,1个外部中断,TIMER2(与打印机共用)超时,TIMER3产生IC卡时钟
按键: 1个外部中断
中断优先级
P80软件可控制的中断级别可以考虑设计如下(FIQ级别最高,其次为IRQ中断):
(1) IC卡定时采样中断(TIMER3)(使用FIQ中断)
(2) 磁卡中断
(3) 热敏打印机加热控制的TIMER1中断和控制热敏打印机走纸的TIMER2中断
(4) 串口通信的(UART0,UART1,UART2)中断。
(5) 按键板中断
(6) 系统定时器使用的TIMER4中断
(7) IC卡插拔中断
(8) 未定义或取指非法,未对齐等错误中断
(9) 软件中断
P80的中断句柄和优先级别由监控底层程序统一管理,其他的参数由各模块自己设置。监控底层程序提供一套中断句柄设置函数:
s_SetIRQHandler(intHandlerNo, void (*IRQHandler)(void));设置IRQ中断
HandlerNo为预定义的宏,如:INT_TIMER0,INT_UART2等等。
软件中断处理
为了良好的安全性,所有应用程序对监控中底层驱动的访问都必须通过SWI软件中断来实现。应用程序在调用软件中断前,必须把调用参数填到动态参数交换区,然后通过指令SWI来实现系统调用。
其他中断的处理
在ARM中还有:指令错、取指令错、取数据错三个中断,在P80中,如果进入这三个中断,则提示相应的错误并等待用户按键后,重新启动机器。
- 一种基于monitor的系统软件架构
- 系统软件架构的认识
- 基于SLSB的一种架构模式
- 基于构件的嵌入式系统软件设计
- 一种基于SOA的应用集成中间件体系架构
- 一种完全基于开源实现的SOA架构
- 一种基于memcache或redis缓存架构的验证码
- 一种基于EF+MVC的小型系统快速开发架构
- 一种基于Makefile的编译系统架构实现及自动化
- 一种基于reSIProcate的gb28181接入系统架构设计
- 嵌入式系统软件架构设计
- 对大宋下一代系统软件架构师的七个期望
- 对大宋下一代系统软件架构师的七个期望
- 基于DALLS18B20的8路温度检测系统软件程序
- 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南
- 基于WinCE的液位遥测系统软件设计
- 基于雷达的安防视频监控系统软件设计
- 嵌入式系统软件架构设计概论
- 手把手教你写Js日期时间选择器(3)-让控件滑动起来
- 使用nexus搭建Maven私服
- 51nod oj 1091 线段的重叠 【贪心】
- 可以动态修改时间的CountDownTimer
- ProgressDialog 进展对话框
- 一种基于monitor的系统软件架构
- 1240 莫比乌斯函数(数论)
- 如何解决缺失值
- 网页调试的那些事
- 戏说SpringMVC原理-1
- php 最大堆的实现
- POJ - 2739 Sum of Consecutive Prime Numbers(尺取法)
- 按之字形顺序打印二叉树
- win7 cmd中文乱码