• 2019-2020-1 20175226 《信息安全系统设计基础》ucosii


    ucosii-1(必做)

    • 下载附件,尝试在vc6.0 中编译运行ucos
    • 下载附件,尝试在vs2017中编译运行ucos,给出你遇到的问题和解决方式

    下载附件,尝试在vc6.0 中编译运行ucos

    下载附件,尝试在vs2017中编译运行ucos,给出你遇到的问题和解决方式

    • 软件下载失败

    ucosii(选做)

    • 阅读附件中的代码,回答:
      • ucos是如何分层的?
      • HAL都有哪些代码?
      • 分析任务是如何切换的

    ucos是如何分层的

    • 1.三层,分别是:上层访问抽象接口层、设备管理核心数据结构层、硬件设备驱动模块层。
    • 2.上层访问抽象接口层: 一般的抽象层设计会直接在这一层提供5个访问接口API: DeviceOpen、DevGetch、DevPutch、DevControl. DeviceClose,分别用于打开设备、读设备、写设备、设备控制和关闭设备。而在这个设计里面更改了这种定义模式提供两个公用的接口DeviceOpen 和DeviceClose,同时为不同的外设分别提供特定的抽象接口,在移植的时候利
      用这些抽象接口的不变性保证应用程序的可移植能力。这样做的优点更适合于有单片机开发经验的工程人员直接调用。
    • 3.设备管理核心数据结构层:这是通用驱动框架的核心,主要用每个设备分配一个设备控制块,通过链表形式进行管理,该链表定义为设备控制块链表DEV_CONTROL_BLOCK* HvlConList。 在这一层, 为系统中的每个硬件设备分配唯一的设备ID。上层应用程序通过将设备ID作为参数传递给DeviceOpen函数实现对相应设备的核心管理数据结构的定位搜索,通过搜索,DeviceOpen函数找到相应设备控制块,申请设备的使用权限,获得相应硬件设备的操作句柄,该句柄指向具体的外设底层操作函数列表,返回该设备句柄;再通过上层抽象接口层提供的接口函数对设备进行访问。
    • 4.硬件设备驱动模块层:这-一层是硬件设备驱动模块功能的实现层,对各个硬件设备的驱动在相应的硬件设备驱动模块中完成。各个硬件设备驱动模块,原则上需要实现如下几个函数: DevGetch、 DevPut ch、DevControl,分别完成相应设备的读、写、控制,当然,可以根据具体设备的特性,只实现3个驱动函数的其中一部分,例如,如果某设备不支持写操作,那么就不用实现DevPutch函数。

    HAL代码部分

    • 硬件抽象层(HAL)
      • 硬件抽象层(HAL)是体系结构相关的底层程序
      • 处理系统启动、硬件初始化以及中断与异常
      • 硬件抽象层对内核其它部分提供统一的调用接口
      • HAL可以提供BSP规范,提供跨平台可移植性
      • 硬件抽象层具有与硬件密切相关性
      • 硬件抽象层具有与操作系统无关性
      • 接口定义的功能应包含硬件或系统所需硬件支持的所有功能
      • 接口定义简单明了,太多接口函数会增加软件模拟的复杂性
      • 具有可测性的接口设计有利于系统的软硬件测试和集成

    分析任务是如何切换的

    • 下图表明了任务状态之前切换的关系,调用哪种函数可以进行任务切换。uCOS-II就是通过这些直接或间接调用的系统函数进行任务切换的

    • 每一个任务都是一个死循环,并且必须在循环内调用系统函数来释放CPU控制权,比如调用系统的延时函数OSTimeDly()延时一段时间,这个时候系统就会知道这个任务被延时了,延时时间记录在TCB中的超时时间dly中,任务调度器将其他任务予以运行。
    • 实际的任务调度有两种机制:
      • 1.中断级任务调度:任何中断返回时必须调用一个系统函数OSIntExit(void),进行一次任务调度。比如一般任务调度器通常是一个定时中断,比如1000次每秒,成为OS时钟。每次OS时钟要返回时都会调用OSInitExit()进行任务切换,运行当前就绪的优先级最高任务。一般这个OS时钟的优先级很低,为整个系统优先级倒数第二低(倒数第一低的是Idle Task,空闲任务),因此实际上这个OS时钟最终并不会返回。
      • 2.任务级任务调度:在任务运行中执行一次OS的特定函数,比如前面提到的OSTimeDly(),此函数在返回之前会执行一次任务调度。
        因此总的任务调度次数会远远高于OS时钟的轮询频率的。
  • 相关阅读:
    Android 3D滑动菜单完全解析,实现推拉门式的立体特效
    2013年9月25日参加耐特菲姆(北京)玉米滴灌培训小结
    日积月累:ProguardGui进行jar包代码混淆
    CSS3之渐变Gradient
    poj 3182 The Grove
    qrcodeJS生成二维码
    样式优先级
    git流程及操作
    js data日期初始化的5种方法 [转]
    转 jQuery中的$.extend方法来扩展JSON对象
  • 原文地址:https://www.cnblogs.com/20175226wpy/p/12115319.html
Copyright © 2020-2023  润新知