时间管理

uC/OS-II的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生一次(这个时间片段是OS的作者推荐的,大家可以参考邵贝贝翻译的《嵌入式实时操作系统ucos-II》这本书),时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变的,该中断也成为一个时钟节拍。这里隐含的意思就是你选择的芯片如果想使用UCOS系统,前提条件一定要有一个Timer。   
uC/OS-II要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,例如中断级的任务切换函数,系统时间函数。
uCOS时间管理的相关函数
1:任务延迟函数OSTimeDly()
Ucos提供一个可以被任务调用而将任务延时一段特定时间的功能函数,即OSTimeDly().任务调用OSTimeDly()后,一旦规定的时间期满或者有其他的任务通过调用OSTimeDlyResume()取消了延时,他就会进入就绪状态。只有当该任务在所有就绪态任务中具有最高的优先级,它才会立即运行。
2:按时,分,秒延时函数OSRimeDLyHMSM()
与OSTimeDly()一样,调用OSRimeDlyHMSM()函数也会是UCOS进行一次任务调度,并且执行下一个优先级最高的就绪任务。当OSTimeDlyHMSM()后,一旦规定的时间期满,或者有OSTimeDlyResume(),它就会马上处于就绪态。同样,只有当该任务在所有就绪态任务中具有最高的优先级,他才开始运行。
3:恢复延时的任务OSTimeDlyResume()
延时的任务可以不等待延时的期满,而是通过其他任务取消延时而使自己处于就绪态,可以通过该函数来实现,实际上,OSTimeDlyResume()也可以唤醒正在等待的事件。
4:系统时间OSTimeGet()和OSTimeSet()

内存管理

在ANSI C中是使用malloc和free两个函数来动态分配和释放内存。例如在Linux系统中就是这样。但在嵌入式实时系统中,多次这样的操作会导致内存碎片,因为嵌入式系统尤其是uCOS是实地址模式,这种模式在分配任务堆栈时需要整块连续的空间,否则任务无法正确运行。且由于内存管理算法的原因,malloc和free的执行时间也是不确定。这点是实时内核最大的矛盾。

基于以上的原因uC/OS-II中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但不同分区之间的内存快大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时执行时间也是固定的。

同时uCOS-II根据以上的处理封装了适合于自己的动态内存分配函数OSMemGet()和OSMemPut(),但是使用这两个函数动态分配内存前需要先创建内存空间,也就是第二段咱们介绍的内存分块。呵呵,不罗嗦了,具体的关于内存管理的函数如下:

内存控制块的数据结构
Typedef
struct
{void *osmemaddr ;指向内存分区起始地址的指针。
Void *osmemfreelist ;指向下一个空余内存控制块或者下一个空余内存块的指针,
Int32u osmemblksize ;内存分区中内存块的大小,是建立内存分区时定义的。
Int32u osmemnblks ;内存分区中总的内存块数量,也是建立该内存分区时定义的。
Int32u osmemnfree ;内存分区块中当前获得的空余块数量。
}os_mem;
1;建立一个内存分区,OSMemCreate()
2:分配一个内存块,OSMemGet()
应用程序通过调用该函数,从已经建立的内存分区中申请一个内存块。该函数唯一的参数是指向特定内存分区的指针。
3:释放一个内存块,OSMemPut()
当应用程序不再使用一个内存块时,必须及时的把它释放,并放回到相应的内存分区中,这个操作就是通过调用该函数实现的。
4:查询一个内存分区的状态,OSQMemQuery()。

转载于:https://www.cnblogs.com/songfeixiang/p/3733828.html

2nbsp;时间管理和内存管理相关推荐

  1. Linux内存管理之内存管理单元(MMU)(二)

    Linux内存管理之内存管理单元(二) 1.1.什么是MMU 在CPU内部,有一个专门的硬件单元来负责这个虚拟页面到物理页面的转换,它被被称为内存管理单元(Memory Management Unit ...

  2. 【Linux 内核 内存管理】内存管理架构 ④ ( 内存分配系统调用过程 | 用户层 malloc free | 系统调用层 brk mmap | 内核层 kmalloc | 内存管理流程 )

    文章目录 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) 二.内存管理流程 一.内存分配系统调用过程 ( 用户层 | 系统调用 | 内核层 ) " 堆内存 " ...

  3. 内存管理之内存管理的概念

    内存管理之内存管理的概念 为什么进行内存管理 页式管理中每个页表项大小的下限如何决定 多级页表解决了什么问题,带来了什么问题 1. 内存管理的基本原理和要求 1.1 定义 操作系统对内存的划分和动态分 ...

  4. 关于mysql内存管理_MYSQL内存管理及优化

    MYSQL内存管理及优化 内存是影响数据库性能的主要资源,也是mysql性能优化的一个重要方面: 内存优化的原则 将尽量多的内存分配给mysql做缓存,但是要给操作系统和其他程序的运行预留足够的内存, ...

  5. python内存管理_Python内存管理(一):预备知识

    一.内存的理解 你可以将计算机中的内存理解为一本为短期存储而设计的书.这本书中现在什么都没写,但最终不同的"作者"会来寻求空间,写入他们想写的故事. 由于他们之间不能彼此覆盖,他们 ...

  6. java堆是gc管理_JVM内存管理及GC机制

    一.概述 JavaGC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和 ...

  7. 内存管理 浅析 内存管理/内存优化技巧

    内存管理 浅析 下列行为都会添加一个app的内存占用: 1.创建一个OC对象: 2.定义一个变量: 3.调用一个函数或者方法. 假设app占用内存过大.系统可能会强制关闭app,造成闪退现象,影响用户 ...

  8. 【Linux 内核 内存管理】内存管理架构 ② ( 用户空间内存管理 | malloc | ptmalloc | 内核空间内存管理 | sys_brk | sys_mmap | sys_munmap)

    文章目录 一.用户空间内存管理 ( malloc / free / ptmalloc / jemalloc / tcmalloc ) 二.内核空间内存管理 1.内核内存管理系统调用 ( sys_brk ...

  9. 【Linux 内核 内存管理】内存管理架构 ① ( 内存管理架构组成 | 用户空间 | 内核空间 | MMU 硬件 | Linux 内核架构层次 | Linux 系统调用接口 )

    文章目录 一.内存管理架构组成 ( 用户空间 | 内核空间 | MMU 硬件 ) 二.Linux 内核架构层次 三.Linux 系统调用接口 一.内存管理架构组成 ( 用户空间 | 内核空间 | MM ...

最新文章

  1. 改进YOLOv3 | IA-YOLO让恶劣天气的目标检测起飞了!!!
  2. BZOJ1086 [SCOI2005]王室联邦 【dfs + 贪心】
  3. Linuxnbsp;rpmnbsp;命令参数使用…
  4. android 耳机检测,android – 检测耳机是否有麦克风
  5. 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
  6. 真的不值得重视吗?ETH Zurich博士重新审视贝叶斯深度学习先验
  7. 向xxxhub发了一个数据包,发现了···
  8. tp5 日期范围查询_VB实战应用 | 如何巧妙解决日期范围查询问题
  9. 直接用自己服务器做图床可以吗_图床+typora+gitee,写文档再也不那么麻烦
  10. java 多个timer_java – Timer正在创建多个计时器实例
  11. java无框架开发,DON: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析...
  12. 玩转vim之vim插件Ctags
  13. java feign请求pathvariable_8、服务发现amp;服务消费者Feign
  14. Mysql 数据库/表 备份 与 还原
  15. STM32——红外遥控
  16. arduino 的显示——LCD1602、LiquidCrystal库的使用
  17. 【原创】无锁编程技术及实现
  18. 不用 PLC与变频器通信程序 不用 三菱PLC与变频器通讯程序不经过 PLC与变频器通信
  19. Eclipse使用技巧--设置编辑器背景护眼色和设置字体
  20. 电脑开机提示计算机无法启动不了,图文详解电脑开机无法进入系统怎么办

热门文章

  1. 【CCCC】L2-027 名人堂与代金券 (25分),模拟水题
  2. Apsara Clouder专项技能认证:实现调用API接口(阿里云疫情白给课程系列)
  3. 832计算机专业基础,2019年考试科目832计算机组成原理与数据结构.doc
  4. SQL Server高级查询之数据库安全管理 第六章节
  5. Python入门--元组的创建,(),tuple()
  6. c++ 调用python_闲话python 48: C/C++扩展Python与Swig工具
  7. Java常用算法三:01背包问题
  8. LL(1)文法与其对应的FOLLOW,SELECT和FIRST集
  9. RayMarching2:给球加上光照
  10. Tarjan边的双联通