你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用malloc申请内存不成功

[复制链接]
meixu 提问时间:2017-7-5 14:49 /
悬赏10ST金币已解决
写一个程序,串口收到图片,利用STemWin显示图片。程序先初始化GUI,然后进入主体,存放图片的大小设为64K.
刚开始我是直接申请了一个大数组,能完成接收和显示,但是后来考虑到数组太大,考虑到可能由于数组太大的缘故,
就尝试malloc和free函数处理一下,具体程序见下,但是调试时malloc怎么也申请不成功,总是进入GUI_Delay(1000)
我用的是STM32F429DISCOVERY,看手册片上256K,还有64MBit片外SDRAM,应该够用吧,请教一下是为什么?


    uint8_t * databuf;
    databuf = (uint8_t *)malloc(63354*sizeof(uint8_t));
    if(databuf == NULL){
      GUI_Delay(1000);
   }
    HAL_UART_Receive_DMA(&Uart6Handle, databuf, 63354);
    while(1){
   
       if(UART_RECV_STA == 6){
          UART_RECV_STA=0;
         GUI_BMP_Draw(databuf,50,40);
        break;
        }
         GUI_Delay(100);        
   }

最佳答案

查看完整内容

自己写个maclloc管理,参考原子的代码或者ucos或者freertos里面的,可以使用你外部的sdram。
收藏 1 评论9 发布时间:2017-7-5 14:49

举报

9个回答
creep 回答时间:2017-7-5 14:49:10
meixu 发表于 2017-7-5 15:36
哦哦,刚才我从网上查了查,注意到这个问题,可是一改 .s 文件中 heap_size 的大小,就出现好多
no space ...

自己写个maclloc管理,参考原子的代码或者ucos或者freertos里面的,可以使用你外部的sdram。
creep 回答时间:2017-7-5 15:19:52
你这malloc()直接取的堆的空间吧,你设置的堆的空间有这么大么。
meixu 回答时间:2017-7-5 15:36:04
creep 发表于 2017-7-5 15:19
你这malloc()直接取的堆的空间吧,你设置的堆的空间有这么大么。

哦哦,刚才我从网上查了查,注意到这个问题,可是一改 .s 文件中 heap_size 的大小,就出现好多
no space in excution regions in .ANSY selector matching ...  错误,有办法解决吗
meixu 回答时间:2017-7-5 22:27:56
creep 发表于 2017-7-5 17:22
自己写个maclloc管理,参考原子的代码或者ucos或者freertos里面的,可以使用你外部的sdram。 ...

嗯嗯,最后用的外部SDRAM. 对于RAM这块看来还真得了解一下,有几个问题还是想问一下。片上的256K是SRAM,开发板上外扩的是SDRAM,两种存储器在工作原理上有区别,速度有快慢,但同样都是作为RAM使用。刚开始我以为外接的SDRAM只要配置好后,使用上就跟片上RAM没什么区别,用来存放临时变量什么的,经过这次调试,我发现在变量上还是有区别的,这个变量要是函数内的局部变量,虽然用 attribut at 放到SDRAM上,但其实它还是在片上RAM中,只有全局变量才能放到SDRAM上,是这样吗?
creep 回答时间:2017-7-6 09:03:49
meixu 发表于 2017-7-5 22:27
嗯嗯,最后用的外部SDRAM. 对于RAM这块看来还真得了解一下,有几个问题还是想问一下。片上的256K是SRAM, ...


全局变量,堆和栈空间全部定义到外部SRAM的方法和一个配套例子
局部变量应该在默认在栈中,你参考上面的例子修改下看行不行,我没有实测过。
meixu 回答时间:2017-7-6 21:52:38
creep 发表于 2017-7-6 09:03
全局变量,堆和栈空间全部定义到外部SRAM的方法和一个配套例子
局部变量应该在默认在栈中,你参考上面的 ...

嗯嗯,原来是这样。
ataudio 回答时间:2017-9-20 13:01:52
mark
好贴留名。。关键处,一点就可以解决问题了。
电小龙 回答时间:2019-10-29 11:14:03
creep 发表于 2017-7-5 14:49
自己写个maclloc管理,参考原子的代码或者ucos或者freertos里面的,可以使用你外部的sdram。 ...

请教个问题,原子代码里的malloc,和ucos或者freertos里的内存管理代码是什么区别,如果用RTOS进行开发,是不是就不需要再写malloc了,如果要用到sdram的话,也可以直接用freertos里的内存管理代码吗?
creep 回答时间:2019-10-29 15:42:17
电小龙 发表于 2019-10-29 11:14
请教个问题,原子代码里的malloc,和ucos或者freertos里的内存管理代码是什么区别,如果用RTOS进行开发, ...

大体上都是申请一大块RAM或者SDRAM 然后写个管理算法,至于区别建议你直接看对应的代码。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版