完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
分散加载文件如下 LR_IROM1 0x08000000 0x00100000 { ; load region size_region 其中具体的是
当前用了2个串口,一个buf是256,另一个是4096,只要开串口,就报这个断言错误 注释掉一个串口,另一个串口也会报错,我把这3个放在了那个64KB的位置,计算一下,加起来也没有65536个字节啊,为什么总报错呢? 堆栈空间截图
谢谢 更新,发现缩小串口的buf,程序可以跑起来,这里4096改成10可以运行
但是我对比了正常和不正常的map文件,差别非常小,没有发现哪个特别大,我应该怎么调呢
|
|
相关推荐
7个回答
|
|
|
这个。。。断点进去调试一下看看啦。
既然是在 rt_serial_open 函数出现的断言,那么就在这个函数开头打个断点。然后在 rt_device_open 调用的地方打个断点。 先观察这俩函数的调用顺序,是否是 rt_device_open 调用 rt_serial_open 后出现断言的。 然后就是单步 rt_serial_open 函数看看代码执行流程和变量变化情况, rx_info 申请内存是否成功 等等等等… |
|
|
|
|
|
申请不成功啊,现在是想怎么调整分散加载文件,留出空间,我不知道到底是哪里空间不够。
|
|
|
|
|
|
因为是rx fifo失败,申请空间的函数是 rx_fifo = (struct rt_serial_rx_fifo*) rt_malloc (sizeof(struct rt_serial_rx_fifo) + serial->config.bufsz); RT_ASSERT(rx_fifo != RT_NULL); 调用这个函数 RT_WEAK void *rt_malloc(rt_size_t size) { rt_base_t level; void *ptr; /* Enter critical zone */ level = _heap_lock(); /* allocate memory block from system heap */ ptr = _MEM_MALLOC(size); /* Exit critical zone */ _heap_unlock(level); /* call 'rt_malloc' hook */ RT_OBJECT_HOOK_CALL(rt_malloc_hook, (ptr, size)); return ptr; } 然后这个宏定义在这,相当于初始化之后,有一个systemheap #define _MEM_INIT(_name, _start, _size) system_heap = rt_smem_init(_name, _start, _size) #define _MEM_MALLOC(_size) rt_smem_alloc(system_heap, _size)
这里调用了rt_system_heap_init函数
出现heapbegin heapend,找到board.h
|
|
|
|
|
|
用TCM时,留意下TCM的注意事项
|
|
|
|
|
|
|
|
|
|
|
|
我觉得这块内存已经用起来了,因为map文件里 IRAM2里面有我添加的内容。board.h不知道还需要修改否。
现在是添加完了,串口rx fifo没有空间,我追踪一下,rx fifo是从128KB分配空间,e现在是添加完了,串口rx fifo没有空间,我追踪一下,rx fifo是从128KB分配空间,怀疑是128KB剩下的不够4096了,但是手动算了一下,剩下的够4096啊,那为什么呢 |
|
|
|
|
|
调整一下 rtt内存管理算法, RTT支持双内存片。
LR_IROM1 0x08000000 0x00080000 { ; load region size_region ER_IROM1 0x08000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) .ANY (+XO) } RW_IRAM1 0x20000000 0x00020000 {; RW data .ANY (+RW +ZI) } RW_IRAM2 0x10000000 0x00010000 { .ANY (+RW +ZI) } } 将ram2初始化为内存堆 static struct rt_memheap ram2; static int ram2_heap_init(void) { return rt_memheap_init(&ram2, "ram", (void *)0x10000000, 0x10000); } INIT_BOARD_EXPORT(ram2_heap_init); RTT内存管理配置 /* Memory Management */ #define RT_USING_MEMPOOL #define RT_USING_MEMHEAP #define RT_USING_MEMHEAP_AUTO_BINDING #define RT_USING_MEMHEAP_AS_HEAP #define RT_USING_MEMTRACE #define RT_USING_HEAP |
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1092 浏览 0 评论
3044 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9411 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2900 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2305 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 22:57 , Processed in 0.746535 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
741