QQ游客
- 积分
- 1254
- 金钱
- 1254
- 注册时间
- 2016-12-9
- 在线时间
- 56 小时
|
3金钱
本帖最后由 cxelove 于 2017-11-16 08:08 编辑
我是在429核心板上操作的。首先我使用
[mw_shl_code=c,true]SerialQueBufTypeDef (*SerialQueBuffer)[5]
SerialQueBuffer = mymalloc( SRAMEX, 5 * sizeof( SerialQueBufTypeDef ) );
mymemset( SerialQueBuffer, 0, 5 * sizeof( SerialQueBufTypeDef ) );;[/mw_shl_code]
这样操作后面使用都没有问题,可是我SRAMEX换成内部RAM的话后面程序里面mymemcpy拷贝到这个结构体SerialQueBuffer[0]->成员里面就会出现硬件错误。
后来我改成
[mw_shl_code=c,true]SerialQueBufTypeDef *SerialQueBuffer;
SerialQueBuffer = mymalloc( SRAMEX, 5 * sizeof( SerialQueBufTypeDef ) );
mymemset( SerialQueBuffer, 0, 5 * sizeof( SerialQueBufTypeDef ) );[/mw_shl_code]
使用SerialQueBuffer[0].成员操作就不会有问题了,这是为什么呢?
顺便问一下mymalloc管理的内部内存大小和freertos定义的总内存大小是互相冲突 加一起不能超过总内存的吗?
如果我使用heap_5.c管理内存并且使用
[mw_shl_code=c,true]xHeapRegions[0].pucStartAddress = ( uint8_t * ) mymalloc( SRAMEX, 0x2000000 );
xHeapRegions[0].xSizeInBytes = 0x2000000;
/* 向函数vPortDefineHeapRegions()传递数组参数. */
vPortDefineHeapRegions( xHeapRegions );[/mw_shl_code]
传入外部RAM内存地址,是不是config定义的freertos内存地址就是在外部空间呢?
|
最佳答案
查看完整内容[请看2#楼]
1,我看你两段代码一样。你假设你代码写对了,检查下两者内存池的对齐是否一样?
2,不要在一个代码里面,同时用2中内存分配方式。
|