Microchip单片机使用malloc()函数的注意事项

来源:本站
导读:目前正在解读《Microchip单片机使用malloc()函数的注意事项》的相关信息,《Microchip单片机使用malloc()函数的注意事项》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Microchip单片机使用malloc()函数的注意事项》的详细说明。
简介:C语言中的malloc()函数用于动态地在内存中分配一块空间来存储数据,对于在程序执行过程中需要动态分配内存的应用来说,这是十分有用的功能。

C语言中的malloc()函数用于动态地在内存中分配一块空间来存储数据,对于在程序执行过程中需要动态分配内存的应用来说,这是十分有用的功能。

Microchip的编译器C30(16位单片机)以及C32(32位单片机)在较新的版本中也开始实现了这个函数,这为对RAM本来有些捉襟见肘的单片机编程添加了不少灵活性。不过在实际使用过程中有几个需要注意的地方(以MPLabv8.63为例)。

1、需要告知编译器程序中将会使用动态内存分配,不然在16位的单片机中编译会出错,在32位的单片机中编译不会出错,但是在程序运行的时候,会出现malloc分配失败。

选项位于 Project -> Build Option -> MPLab xxLink 这个界面里,找到 Heap Size这个框,在旁边输入动态分配可能需要的字节数即可。另外,实际使用中注意到一个现象,就是输入的字节数大小在实际程序的运行中并不能全部分配到,实际最多只能得到的要比输入的字节数少8个byte的样子,不然malloc返回NULL,即分配空间失败。不知道这是编译器的bug,还是分配空间过程中的自然损耗。

2、程序在第一次分配大空间之前需要“热身”,也就是预分配一次小空间,才能获得设置时设定的最大空间。

比如设置时候输入了heap空间为16384字节(byte),如果跑上来就用malloc函数请求分配这么大的空间,malloc返回NULL,即分配失败。通过反复尝试发现需要在分配大空间之前先malloc哪怕一个byte的空间,然后在用free释放,再用malloc请求大空间,就不会有任何问题。另外,这里的“大”空间要大到heap空间输入值的1/2。以上面的16384为例,如果程序一跑上来请求分配小于8192的空间,就不会有“预热身”的需要。

提醒:《Microchip单片机使用malloc()函数的注意事项》最后刷新时间 2024-03-14 01:08:57,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Microchip单片机使用malloc()函数的注意事项》该内容的真实性请自行鉴别。