历史上的今天
返回首页

历史上的今天

今天是:2025年04月24日(星期四)

正在发生

2019年04月24日 | UCOSIII存储管理

2019-04-24 来源:eefocus

1、UCOSIII存储管理

1.1、存储管理

作为一个RTOS操作系统,内存管理是必备的系统模块,因此UCOSIII也就内存管理能力。通常应用程序可以调用ANSI C编译器的malloc()和free()函数来动态的分配和释放内存,但是在嵌入式事实操作系统中最好不要这么做,多次这样的操作会把原来很大的一块连续存储区域逐渐地分割成许多非常小并且彼此不相邻的存储区域,这就是存储碎片。


UCOSIII中提供了一种替代malloc()和free()函数的方法,UCOSIII中将存储空间分成区和块,每个存储区有数量不等大小相同的存储块,在一个系统中可以有多个存储区。


一般存储区是固定的,在程序中可以用数组来表示一个存储区,比如u8 buffer[20][10],就表示一个拥有20个存储块,每个存储块10个字节的存储区。



1.2、存储控制块,存储区创建:

UCOSIII中存储控制块来表示存储区,存储控制块为OS_MEM,结构体OS_MEM如下。


struct os_mem {

OS_OBJ_TYPE          Type; //类型必须为OS_OBJ_TYPE_MEM

void                *AddrPtr; //指向存储区起始地址

CPU_CHAR            *NamePtr;//指向存储区名字

void                *FreeListPtr; //指向存储区存储块

OS_MEM_SIZE          BlkSize; //存储区中的存储块大小,单位字节

OS_MEM_QTY           NbrMax; //存储区中总的存储块数

OS_MEM_QTY           NbrFree;//存储区中空闲的存储块数

 

#if OS_CFG_DBG_EN > 0u

    OS_MEM          *DbgPrevPtr;

    OS_MEM         *DbgNextPtr;

#endif

};

 

创建好的存储区如下图


2、存储管理相关API函数。源码在os_mem.c里


2.1 创建存储区使用函数OSMemCreate ();

void  OSMemCreate (OS_MEM       *p_mem,//指向存储区控制块地址

                   CPU_CHAR     *p_name,//存储区名字

                   void         *p_addr,//村春去所有存储空间基地址

                   OS_MEM_QTY    n_blks,//存储区中存储块个数

                   OS_MEM_SIZE   blk_size,//存储块大小

                   OS_ERR       *p_err)

2.2 内存申请

void  *OSMemGet (OS_MEM  *p_mem,//要使用的存储区

                 OS_ERR  *p_err)//返回错误码

2.3 内存释放

  void  OSMemPut (OS_MEM  *p_mem,//指向存储区控制块

                void    *p_blk,//指向要归还的存储块

                OS_ERR  *p_err)


推荐阅读

史海拾趣

地博电子(DIBO)公司的发展小趣事

随着公司业务的不断发展,地博电子在2010年成功投产了2条全自动化PC薄膜生产线。这一举措不仅大大提高了生产效率,降低了生产成本,还确保了产品质量的稳定性和一致性。全自动化生产线的投产,为地博电子在电子材料行业中的竞争地位奠定了坚实的基础。

Evans Capacitor Company公司的发展小趣事

随着市场竞争的加剧,ECC意识到单纯的技术创新已经不足以保持领先地位。因此,公司开始注重产品品质的提升。ECC引入了严格的质量管理体系,从原材料采购到生产流程,再到成品检测,每一个环节都严格把控。这一举措使得ECC的产品质量得到了显著提升,赢得了客户的广泛信任。

Aces Electronics Co Ltd公司的发展小趣事

近年来,电子行业经历了深刻的变革,新技术、新产品层出不穷。面对这一形势,Aces及时调整战略,加大在新技术领域的投入,推动公司向高端化、智能化方向发展。同时,公司还注重人才培养和团队建设,吸引了一批高素质的研发和管理人才,为公司的转型升级提供了有力支持。

ABECO公司的发展小趣事

品质是ABECO的生命线。公司始终坚持严格的质量管理体系,从原材料的采购到生产过程的控制,再到产品的检测和包装,每一个环节都严格把关。此外,公司还定期举行质量培训活动,提高员工的质量意识。这种对品质的执着追求,使得ABECO的产品在市场上始终保持着良好的口碑和竞争力。

超音(CY)公司的发展小趣事

品质是超音一直以来的追求。公司注重产品质量管理,建立了完善的质量检测体系,确保每一件产品都符合高标准的质量要求。同时,超音还加强了品牌建设,通过广告宣传、赞助活动等方式提升品牌知名度和美誉度。这些努力使得超音在消费者心中树立了良好的品牌形象,为公司的长期发展奠定了坚实的基础。

Andersen Laboratories Inc公司的发展小趣事

随着LED背光液晶电视市场的快速发展,AnalogicTech敏锐地捕捉到了这一机遇。公司推出了直接式和边缘式LED背光驱动器系列,显著增强了LED背光液晶电视的能效和用户体验。这一创新举措不仅为AnalogicTech赢得了市场份额,也进一步巩固了其在电子行业中的领先地位。

问答坊 | AI 解惑

TI常用的各款DSP数据手册集锦

TM2系列的有: tms320lf240x tms320r281X tms320f2812 TMS320C206 DataSheet…

查看全部问答>

别让你的简历15秒后被扔掉

今天帮公司筛选简历,感受颇多!我所在的是一家大型企业。从收到的简历数量可以看出来 1200+份简历,从中选出150+份进行笔试。   比例:8选1  机缘凑巧去帮老总们筛选简历,感受颇多。   觉得有必要跟还在找工作的师弟师妹们说说一些需要注 ...…

查看全部问答>

周公M0新原理图

周公的M0开发板的原理图终于更新了…

查看全部问答>

关于控制USB外设的问题

我是第一次作这方面的东西: 我感觉:首先要判断次外设的存在(包括他的插入于拔除)         向外设发送控制命令(包括向他提供数据)。 不知道思路是不是有问题,请各位给个思路。 …

查看全部问答>

EmbestSTM32板(199元)不包含的模块

8MB SPI FlashIC卡读卡控制芯片和卡座由于成本控制原因,199元销售的板子里不包含上述模块,对于此消息发布较晚,给部分网友造成了误解,我们深表歉意,希望大家能够继续给我们指正,谢谢!…

查看全部问答>

LaunchPAD新配件-音频电容触摸套件

C5000音频电容触摸套件套件具体指标如下:MP3 Encode & DecodeSD Card File SystemUSB Mass Storage ClassOLED, CodecUART client interface可使用该套件配合launchpad制作音乐播放器:MP3 PlayerVoice RecorderFire Alarm – MSP430 detects tem ...…

查看全部问答>

MSP430F149的定时器A的连续计数模式的CCR0

MSP430F149的定时器A的连续计数模式的CCR0的作用?增计数模式是从0增加到CCR0就复位,增减计数模式是从0增加到CCR0,在减到0。可是连续计数模式呢?CCR0的作用?…

查看全部问答>

大学堂新课上线:《 CC1120 Sub1G 开发套件动手实践》

大学堂有新课程上线啦! 《 CC1120 Sub1G 开发套件动手实践》:https://www.eeworld.com.cn/training/2014/wuxian_0117/382.html 该视频系列基于芯威科技CC1120开发套件,演示了如何使用SmartRF控制软件实现简单的数据包收发,如何理解和 ...…

查看全部问答>

有没有M0核的视频教程

最近学习STM32 ,都是103的视频,谁能提供点M0核的…

查看全部问答>

【R7F0C089】+虽有小缺憾,但认真努力过

本帖最后由 人民币的幻想 于 2015-11-24 10:36 编辑 视频里演示测量心率时,使用手腕部分更能快速得到准确值。因此,后期考虑将心率做成手表形式。 …

查看全部问答>