ucos-ii示例7:内存管理测试

发布者:MysticDreamer最新更新时间:2016-12-18 来源: eefocus关键字:ucos-ii  内存管理 手机看文章 扫描二维码
随时随地手机看文章

环境:

主机:WIN8

开发环境:MDK4.72

ucgui版本:3.90

ucos版本:ucos-ii

mcu: stm32f103VE


说明:

本示例中task2请求内存分区,然后往分区内写数据,再将数据通过邮箱发送给task1


效果图:


源码:


  1. #define TASK_STK_SIZE       512  

  2.                   

  3. /********************************************************************* 

  4. *                           静态函数 

  5. **********************************************************************/  

  6.   

  7. static void task_start(void *pdata);  

  8. static void task1(void *pdata);  

  9. static void task2(void *pdata);  

  10.   

  11. /********************************************************************* 

  12. *                           静态变量 

  13. **********************************************************************/  

  14.   

  15. /********************************************************************* 

  16. *                           任务堆栈空间 

  17. **********************************************************************/  

  18.   

  19. static OS_STK Task_Start_Stk[TASK_STK_SIZE];  

  20. static OS_STK Task1_Stk[TASK_STK_SIZE];  

  21. static OS_STK Task2_Stk[TASK_STK_SIZE];  

  22.   

  23. /********************************************************************* 

  24. *                           信号量 

  25. **********************************************************************/  

  26.   

  27. OS_EVENT *Semaphore;  

  28.   

  29. /********************************************************************* 

  30. *                           消息队列数组 

  31. **********************************************************************/  

  32.   

  33. void *Msg_Group[10];  

  34.   

  35. char Msg_Arr[10][30];  

  36. uint8_t Index_Msg_Arr = 0;  

  37.   

  38. /********************************************************************* 

  39. *                           内存分区 

  40. **********************************************************************/  

  41.   

  42. OS_MEM *Buffer_Ptr;  

  43. uint8_t Buffer[10][30];  

  44.   

  45. /********************************************************************* 

  46. *                           函数 

  47. **********************************************************************/  

  48.   

  49. int main(void)  

  50. {     

  51.     //初始化内核  

  52.     OSInit();  

  53.     //创建任务  

  54.     OSTaskCreate(task_start,(void *)0,Task_Start_Stk + TASK_STK_SIZE - 1,10);  

  55.       

  56.     //启动任务  

  57.     OSStart();  

  58. }  

  59.   

  60. /********************************************************************* 

  61. *                           任务函数 

  62. **********************************************************************/  

  63.   

  64. static void task_start(void *pdata)  

  65. {     

  66.     uint8_t err = 0;  

  67.       

  68.     //载入世界  

  69.     world_load();  

  70.       

  71.     //设置背景色  

  72.     GUI_SetBkColor(0xb07c17);  

  73.     GUI_Clear();  

  74.     GUI_SetColor(GUI_BLACK);  

  75.       

  76.     //新建邮箱  

  77.     Semaphore = OSMboxCreate((void *)0);  

  78.       

  79.     //创建内存分区  

  80.     Buffer_Ptr = OSMemCreate(Buffer,10,30,&err);  

  81.       

  82.     //新建任务  

  83.     OSTaskCreate(task1,(void *)0,Task1_Stk + TASK_STK_SIZE - 1,11);  

  84.     OSTaskCreate(task2,(void *)0,Task2_Stk + TASK_STK_SIZE - 1,12);  

  85.       

  86.     while(1)  

  87.     {  

  88.         OSTimeDlyHMSM(0,0,3,0);  

  89.     }  

  90. }  

  91.   

  92. static void task1(void *pdata)  

  93. {  

  94.     char str[30] = {0};  

  95.     uint8_t err = 0;  

  96.     uint8_t *mail;  

  97.   

  98.     while(1)  

  99.     {  

  100.         //请求信号量  

  101.         mail = OSMboxPend(Semaphore,0,&err);  

  102.         //显示  

  103.         sprintf(str,"task1 receive:%d,%d,%d",mail[0],mail[1],mail[2]);  

  104.         GUI_DispStringHCenterAt(str, 120, 40);  

  105.           

  106.         //显示  

  107.         sprintf(str,"task1 time:%ds",OSTimeGet());  

  108.         GUI_DispStringHCenterAt(str, 120, 5);  

  109.         WM_Exec();  

  110.         OSTimeDlyHMSM(0,0,1,0);  

  111.     }  

  112. }  

  113.   

  114. static void task2(void *pdata)  

  115. {  

  116.     char str[30] = {0};  

  117.     uint8_t err = 0;  

  118.     uint8_t *ptr;  

  119.     static uint8_t a = 0;  

  120.   

  121.     while(1)  

  122.     {  

  123.         //请求内存分区  

  124.         ptr = OSMemGet(Buffer_Ptr,&err);  

  125.           

  126.         //赋值  

  127.         ptr[0] = a++;  

  128.         ptr[1] = a++;  

  129.         ptr[2] = a++;  

  130.         //用邮箱发送  

  131.         OSMboxPost(Semaphore,ptr);  

  132.           

  133.         //释放内存分区  

  134.         OSMemPut(Buffer_Ptr,ptr);  

  135.           

  136.         //显示  

  137.         sprintf(str,"task2 time:%ds",OSTimeGet());  

  138.         GUI_DispStringHCenterAt(str, 120, 20);  

  139.         WM_Exec();  

  140.         OSTimeDlyHMSM(0,0,3,0);  

  141.     }  

  142. }  



关键字:ucos-ii  内存管理 引用地址:ucos-ii示例7:内存管理测试

上一篇:STM32F407上移植emwin
下一篇:ucos-ii示例6:消息量集测试

推荐阅读最新更新时间:2024-03-16 15:26

小米盒子1GB增强版发布 内存管理更新
    随着电视机顶盒技术飞速发展,普通有线电视机顶盒收看的内容有限,逐渐不能满足一些消费者的更高需求了,所以网络机顶盒在市场上的需求呈直线上升趋势。就在本月17日,小米公司发布了一款搭载CMA内存管理技术并支持4K视频输出的4K超高清网络机顶盒-小米盒子1GB增强版。   根据官方公布的资料显示,小米盒子1GB增强版采用了CMA(Contiguous Memory Allocator)智能连续内存分配技术,这个技术的好处在于能够智能的将预留大块连续内存分配给其他程序使用,更好的保证了系统流畅性。除此之外小米 盒子1GB增强版相比上一代标准版在外观、性能、功能上都进行了升级,外观方面采用了超薄式设计,配置方面搭载了一颗主频为2
[手机便携]
linux下内存管理学习心得(二)
接着上面的知识,这篇主要总结如下几个方面知识: 1、物理地址的页、区等概念 2、内核使用内存的函数 3、分配字节与分配页 一、区、页 前面linux下内存管理学习心得(一)也已经说了关于页的概念,在内核下面是把物理页(页框)作为分配的基本单元,内核下使用struct page结构体来表示系统中的物理页其中该结构体表示页是否被锁定在内存中,是否为脏页,该页被引用几次,同时还有页的虚拟地址等等。关键一点page结构只与物理页有关而与虚拟页无关,结构仅仅目的在于描述物理内存本身,而不是描述包含在其中物理页中的数据。 下面说明一下如何寻址到物理页: 机器语言指令中出现的内存地址,都是逻辑地址,需要转换成线性地址,再经过M
[单片机]
linux下<font color='red'>内存管理</font>学习心得(二)
ucos-ii学习笔记——s12 lcd led 两任务信号量通信
Created on: 2012-10-17 Author: zhang bin 学习笔记 for ucos-ii MC9S12XS128 lcd12864 ser_2_pin redesigned by zhang bin 2012-10-17 versions :V-0.1 All Rights Reserved //本程序实现lcd的显示和led的闪烁,这两个任务通过信号量进行通信,要实现的效果如下: //lcd任务申请一个信号量后 显示完一个周期后停止显示并且释放信号量,led任务申请到信号量后开始闪烁,闪烁了10 //次后停止,释放信号量,lcd任务再申请信号量,继续开始显示,如
[单片机]
ucos-ii示例2:信号量测试
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例新建一个信号量,task1接收信号量,task2发送信号量。task1时间片为1s/次,task2时间片3s/次。可以看到,因为信号量的关系,task1输出也是3s/次。 注意: 1.信号量的创建不能在内核初始化之前 源码: #define TASK_STK_SIZE 512 /********************************************************************* *
[单片机]
μC/OS-Ⅱ实时操作系统内存管理的改进
μC/OS-Ⅱ是一种开放源码的实时操作系统,具有抢先式、多任务的特点,已被应用到众多的微处理器上。虽然该内核功能较多,但还是有不甚完善的地方。笔者在分析使用中发现,内核在任务管理(包括任务调度、任务间的通信与同步)和中断管理上是比较完善的,具有可以接受的稳定性和可靠性;但在内存管理上显得过于简单,内存分区的建立方式有不合理之处。 1 内存管理不足之处的分析   在分析许多μC/OS-Ⅱ的应用实例中发现,任务栈空间和内存分区的创建采用了定义全局数组的方法,即定义一维或二维的全局数组,在创建任务或内存分区时,将数组名作为内存地址指针传递给生成函数。这样实现起来固然简单,但是不够灵活有效。   编译器会将全局数组作为未初始化的全
[嵌入式]
基于STM32原子战舰板内存管理源码
走到今天,已经开始涉及到计算机核心一点的东西了---内存管理。通过本实验的学习,能够较为深刻体会到 指针是c语言的灵魂 这句话的分量。自然对c语言的能力要求就高很多了。 最近有点乱,但是有关嵌入式系统的学习不曾怠慢过。本文是基于原子老师的c源码,自己的学习的心得,只是对源码作出自己的学习理解,同时也插补了一些涉及到的c语言知识。贴出本文不为别的,一来但愿能有有缘人看到本文,提出指正;二来,为了那些不眠的夜,安慰一下自己。 1, 内存管理简介 内存管理,是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种,他们其实最
[单片机]
ARM裸机开发中内存管理库RT_HEAP的使用
在使用arm芯片进行裸机开发的时候,很多时候都需要内存管理的功能,我们可以使用自己写的内存管理程序,也可以直接使用标准库,不过我一般比较喜欢标准库,速度快,今天就来说说在C语言环境下怎么样进行内存的动态使用 首先,应该初始化C堆,初始化代码如下 #include malloc.h #pragma import (__use_realtime_heap) //这个函数在rt_heap.h中声明,需要用户自己去实现,返回任意值 unsigned __rt_heap_extend(unsigned size, void **block) { return 0; } void MallocInit(void
[单片机]
ucos-ii示例1:新建任务
环境: 主机:WIN8 开发环境:MDK4.72 ucgui版本:3.90 ucos版本:ucos-ii mcu: stm32f103VE 说明: 本示例新建两个任务,并运行。 注意: 1.不同任务的任务优先级必须不一样,否则只运行首先定义的任务 2.从系统时钟设置必须在内核启动后设置,否则会导致OSIntNesting一直为1,从而OS_TaskStat函数因为OSTimeDly函数一直返回0陷入死循环 //系统时钟设置,1ms嘀嗒一次 if (SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC)) { while (1); }
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved