硬汉嵌入式论坛

 找回密码
 立即注册
查看: 638|回复: 7
收起左侧

[μCOS-III] 关于超过FLASH存储前256K字节,指令延时的问题

[复制链接]

13

主题

26

回帖

65

积分

初级会员

积分
65
发表于 2025-1-22 14:40:15 | 显示全部楼层 |阅读模式

MCU:GD32F103ZKT6   操作系统:UCOSIII

描述:程序的串口突然出现了接收数据无规律丢失的问题。比如发100字节,只能收到七八十字节的数据。排查后发现 只要随便注释一部分函数,串口的接收就正常了。然后就根据这个现象搜相关的回答。最后在GD32的手册上发现了这样一句话 “闪存控制器(FMC),提供了片上闪存需要的所有功能。在闪存的前256K字节空间内,CPU行指令零等待。FMC也提供了页擦除,整片擦除,以及32位整字或16位半字编程闪存等操作。” 果然我又去看了出问题的程序map文件,串口相关的库函数都在 0x08040000 地址之后。只要删减函数让这些库函数放在 0x08040000地址之前就不会出问题了。

问题:我现在的解决办法是优化了自己写的代码,删减了一部分不用的库函数 暂时的解决了这个问题。但是随着功能的增加,如果代码量太大且没办法优化了,那这样的问题改如何解决呢?


回复

使用道具 举报

3

主题

432

回帖

441

积分

高级会员

积分
441
发表于 2025-1-22 15:26:52 | 显示全部楼层
质地不同的存储不要混用,应该在ld文件中用不同的section来区分。
在应用代码中把不重要的代码放到慢速flash中,中断处理以及需要高速处理的代码放在快速flash中。
既然用了这种麻烦的单片机,就一定要应对它的麻烦,别逃避。
回复

使用道具 举报

4

主题

412

回帖

424

积分

高级会员

积分
424
发表于 2025-1-22 15:55:01 | 显示全部楼层
在Options for Target '***'设置里把前256K设置到IROM1剩下设置到IROM2呗,然后在分组里设置下位置
回复

使用道具 举报

13

主题

26

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2025-1-22 16:15:46 | 显示全部楼层
glory 发表于 2025-1-22 15:26
质地不同的存储不要混用,应该在ld文件中用不同的section来区分。
在应用代码中把不重要的代码放到慢速fla ...

我用的是keil。没有找到ld文件 ,百度了一下,是.sct文件吗?分散加载的方式解决这个问题。
回复

使用道具 举报

13

主题

26

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2025-1-22 16:17:21 | 显示全部楼层
cctv180 发表于 2025-1-22 15:55
在Options for Target '***'设置里把前256K设置到IROM1剩下设置到IROM2呗,然后在分组里设置下位置

IROM1和IROM2只能选择一个呀
回复

使用道具 举报

0

主题

28

回帖

28

积分

新手上路

积分
28
发表于 2025-1-22 17:55:06 | 显示全部楼层
glory 发表于 2025-1-22 15:26
质地不同的存储不要混用,应该在ld文件中用不同的section来区分。
在应用代码中把不重要的代码放到慢速fla ...

很不错,非常中肯的回答
回复

使用道具 举报

4

主题

412

回帖

424

积分

高级会员

积分
424
发表于 2025-1-23 09:54:15 | 显示全部楼层
yx0124 发表于 2025-1-22 16:17
IROM1和IROM2只能选择一个呀

你试试就知道了,记得勾选default,当然你也可以自己手动去修改散列文件剩下的我不会了,或者等我晚上有空验证一下。
Snipaste_2025-01-23_09-51-05.png

以下详细设置为ai生成,缺少右键配置源码部分
1. 设置 IROM1 和 IROM2 的内存区域
步骤 1:打开 Keil 工程
打开你的 Keil 工程,点击菜单栏中的 Options for Target,选择 Target 选项卡。
步骤 2:配置 IROM1
在 Target 选项卡中,找到 IROM1 配置区域。
设置 Start(起始地址)为 0x08000000。
设置 Size(大小)为 0x00040000(即 256KB)。
步骤 3:配置 IROM2
在 Target 选项卡中,找到 IROM2 配置区域。
设置 Start(起始地址)为 0x08040000(即 IROM1 结束后的地址)。
根据你的 Flash 总大小设置 Size。例如,如果你有 512KB 的 Flash,那么 IROM2 的大小应为 0x000C0000(512KB - 256KB = 256KB)。

回复

使用道具 举报

13

主题

26

回帖

65

积分

初级会员

积分
65
 楼主| 发表于 2025-1-23 11:23:03 | 显示全部楼层
cctv180 发表于 2025-1-23 09:54
你试试就知道了,记得勾选default,当然你也可以自己手动去修改散列文件剩下的我不会了,或者等我晚上有 ...

感谢 我试一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 03:35 , Processed in 0.050031 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表