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

使用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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版