CH32V307VCT6怎么把常量数组和不常用或不要求速度的代码放进flash非零等待区域

CH32V307VCT6:我有两个超大常量数组,透视变换打表用的数组,共176k多,怎么把这两个数组存到flash非零等待区域,像stm32一样直接加const修饰那个flash就快满了


还有怎么把一些函数不要求速度的也放到非零等待区域,因为代码有点大,尽量省点


主频144MHz,不会出错吧,我看应用手册上说:“在进行 FLASH 相关操作时,强烈建议系统主频不大于 120M。”


希望官方给出详细的解释和步骤,还是CH32V307VCT6的flash大小只有那么大,那个480k是假的吗?


我晓得你是谁了


这个我也想知道,手册上的480K-flash在实际应用时,并没有用上剩下的480-256K-flash,能不能以内存管理方式直接将数据代码塞到特定内存区域



您好,若需要将常量数组放在非零等待区域,可按照下图1配置。关于将函数放在非零等待区域,方法与常量数组方法一样,附件为参考例程,可以参考一下

icon_rar.gifCH32V307 数据常量地址定位.zipimage.png

图1


我看到例程里全都讲到了72M跑,有办法开144跑吗?


那个频率为144MHz不会出错吧,跑摄像头速度很重要,访问慢一点没关系,不会出错就行


还有我要改成128k的ram的话,是那个falsh1不能改,改ram和flash吧,如下图

image.png


对,你下载的时候还要重新配置一下应该


您好,主频设置为144MHz正常是没问题的。关于ld文件中FLASH与FALSH1的修改,一般可将FLASH1的起始地址设置为FLASH的结束地址,比如你设置FLASH设置为192K,那么FLASH1的起始地址设置为0x0030000,长度设置为480-192=288K,当然,若你设置FLASH小于256K,FLASH也可以按照例程的保持不变,也是没问题的。



请问重新设置了flash和ram大小但是芯片无法启动是什么原因?


您好,正常情况下,FLASH和RAM的大小配置只能按照规定的4种配置方式进行配置,如下图。若你有特殊需求或应用,可将具体问题通过邮箱(lzs@wch.cn)和我沟通下。

image.png


芯片手册 V2.2 中明确指出:

在进行 FLASH 相关操作时,强烈建议系统主频不大于 120M。
若实际应用一定要求使用系统主频大于 120M,需注意:
在进行非零等待区域 FLASH 和零等待区域 FLASH、用户字读写以及厂商配置字和 Boot 区域
读时,需做以下操作,首先将 HCLK 进行 2 分频(相关外设时钟也同时分频,影响需评估),FLASH
操作完成后再恢复,保证 FLASH 访问时钟频率不超过 60Mhz(FLASH_CTLR 寄存器的 bit[25]-
SCKMOD 可配置 FLASH 访问时钟频率为系统时钟或系统时钟的一半,该 bit 默认配置为系统时钟
的一半)。


上面的回答中又说“您好,主频设置为144MHz正常是没问题的。


这里有2个疑问:

1. 手册中说的是读取时?是不是写错了,CPU核心执行时就在进行读取,如果读取有问题,144MHz根本没法运行

2. 主频为144MHz时,SCKMOD 采用默认值,也即主频的一半,那么读写 FLASH 到底需不需要降低频率到120MHz?如果不降低频率,是否有安全隐患?


您好,上电时MCU会将FLASH中的代码搬运到RAM运行,若程序中没有FLASH读写相关操作,144MHz下是没有问题的;默认是系统时钟的一半,注意FLASH访问时钟不要超过60MHz,如下图标注。因此读写FLASH需要降到120MHz,建议在120MHz及以下操作。

image.png


关于FLASH操作的频率问题已解决:<=60MHz,也即系统主频<=120MHz。


上电时MCU会将FLASH中的代码搬运到RAM运行”,手册中没有找到相关描述,此处的RAM和用户RAM是同一块区域吗?代码部分全部复制到RAM,RAM是不够的,如何理解?难道这个系列的芯片和其他单片机运行方式不同?望解释


您好,CH32V307的FLASH、RAM大小都是可配置的,几种配置方式如下。FLASH+RAM的大小就是RAM的实际大小,RAM实际大小就是320K,以64K RAM+256K FLASH分配为例,64K作为RAM的大小,256K会用于存放FLASH代码,上电后会将FLASH的程序搬到RAM运行。

image.png



只有登录才能回复,可以选择微信账号登录