完善资料让更多小伙伴认识你,还能领取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 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
819 浏览 0 评论
5690 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2738 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3077 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
32814 浏览 11 评论
73395 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 07:40 , Processed in 0.736818 second(s), Total 82, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号