🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/开源蜂鸟E203/[求助] 如何通过PC向MCU_FLASH写入数据,如何在E203运行中恰当读取这一FLASH
[求助] 如何通过PC向MCU_FLASH写入数据,如何在E203运行中恰当读取这一FLASH
开源蜂鸟E203 作者 发布于 2021-08-02 15:58(1894 天前) 6861 浏览

我在基于MCU200T进行开发的时候希望在系统中存在一个几MB大的只读存储空间。在程序运行之前就把存储空间里面写入好数据,在程序运行期间只会从中读取数据。

在MCU_FLASH、PSRAM和SD卡几个方案中我首先选择了考察MCU_FLASH,并得知应该是可以通过APB总线访问QSPI0寄存器的方式读取这颗FLASH的。所以现在的疑问就是如何在程序运行之前把数据从PC端写入这颗FLASH?

这颗FLASH是不是同时也是存放CPU运行代码的地方?所以PC想访问这个FLASH应该也是通过JTAG下载器?而如何放入用户数据才会让两者不会相互干涉呢?


不知道这篇求助贴能否得到胡灿老师的垂青,我在论坛中注意到您曾回答过不少关于FLASH的问题。

全部回复 7
z
zehfa1107 天前 · 1 楼
回复 匿名用户:

老师请问RISCV的编译器能否为外部文件开辟空间呢,我想从外部的一个文本文件读入信息,然后编译,但是仿真会卡在读文件那步。

请问你后来是怎么解决的呀Orz

匿
1884 天前 · 2 楼
回复 胡灿:

1.里面的错误是因为你们定义的是局部变量,这个编译后是放在stack里面的,stack空间是有限的,所以会溢出。

2.是的

3.如果放的数据是只读的话,那就定义一个全局常量,编译的时候就会放到rodata段里面

4.直接访问定义的全局常量。

老师请问RISCV的编译器能否为外部文件开辟空间呢,我想从外部的一个文本文件读入信息,然后编译,但是仿真会卡在读文件那步。

匿
1892 天前 · 3 楼
回复 胡灿:

1.里面的错误是因为你们定义的是局部变量,这个编译后是放在stack里面的,stack空间是有限的,所以会溢出。

2.是的

3.如果放的数据是只读的话,那就定义一个全局常量,编译的时候就会放到rodata段里面

4.直接访问定义的全局常量。

非常感谢胡老师

胡灿
胡灿1892 天前 · 4 楼
回复 匿名用户:

1、“把需要存储的数据定义在程序里面一起编译”

请问怎么实现?在C代码里还是在IDE里?我们队曾经把一个过大的文本放在字符串变量里,然后得到了这样的报错信息:

 

2、“链接的时候选择flash存储”

是RV-Tools——SDK Configuration Tools里的Download选项吗?

3、rodata段如何设置?这是跟第一张图里报错信息里的ram region类似的一个region吗?

 

4、这样存放进flash的数据如何读取?

 

谢谢胡老师!!

1.里面的错误是因为你们定义的是局部变量,这个编译后是放在stack里面的,stack空间是有限的,所以会溢出。

2.是的

3.如果放的数据是只读的话,那就定义一个全局常量,编译的时候就会放到rodata段里面

4.直接访问定义的全局常量。

匿
1892 天前 · 5 楼
回复 胡灿:

“所以现在的疑问就是如何在程序运行之前把数据从PC端写入这颗FLASH?”

那就把需要存储的数据定义在程序里面一起编译,然后链接的时候选择flash存储,就是存储在flash的,只读数据的话,就放在rodata段就行。

谢谢胡老师!请问可以进一步看一下评论里的问题嘛

匿
1892 天前 · 6 楼

1、“把需要存储的数据定义在程序里面一起编译”

请问怎么实现?在C代码里还是在IDE里?我们队曾经把一个过大的文本放在字符串变量里,然后得到了这样的报错信息:

 

2、“链接的时候选择flash存储”

是RV-Tools——SDK Configuration Tools里的Download选项吗?

3、rodata段如何设置?这是跟第一张图里报错信息里的ram region类似的一个region吗?

 

4、这样存放进flash的数据如何读取?

 

谢谢胡老师!!

胡灿
胡灿1892 天前 · 7 楼

“所以现在的疑问就是如何在程序运行之前把数据从PC端写入这颗FLASH?”

那就把需要存储的数据定义在程序里面一起编译,然后链接的时候选择flash存储,就是存储在flash的,只读数据的话,就放在rodata段就行。

💡 请 登录 后参与讨论(微信扫码即登录/注册)