MounRiver使用技巧及配置7
1、关于MRS环境下nop指令的用法
关于nop指令的用法,使用之前可按照下图进行宏定义,具体如下图:
#define nop() asm volatile ("nop")
2、于MRS环境下将数据放在RAM指定位置报错问题
程序编译报错:cannot move location counter backwards
报错原因:链接的过程中,出现这种问题,是因为linker在把编译好的数据放在对应的section的时候, 超过了这段section的大小, 即越界了。要想解决, 要么把这个section扩大, 要么在代码里面将一些code放到其它的section
3、于MRS环境下printf打印不加换行无法打印显示问题
原因:默认情况下, stdout流是行缓冲的,因此仅在到达换行符后(或被告知时)才显示缓冲区中的内容.
关于sdout流,C语言中的 stdout 是一个定义在<stdio.h>的宏(macro),它展开到一个 FILE* (“指向 FILE 的指针”)类型的表达式(不一定是常量),这个表达式指向一个与标准输出流(standard output stream)相关连的 FILE 对象。
解决方法:1、在printf打印时添加换行符(\n);
调用 fflush(stdout);函数立即冲洗stdout,相当于立即刷新,如下图:
4、关于CH32V20x EVT以太网工程配置问题
以太网工程的配置与其他工程配置不同,相关宏定义是在属性设置中配置,如下图:
5、关于MRS编译生成数据代表含义
当MRS编译完成后,编译界面显示信息如下,其中数据代表含义如下:
text段是程序代码段,由编译器在编译链接时自动计算,表示程序代码段大小。
data段包含已初始化的全局变量和静态变量。
bss段是英文Block Started by Symbol的简称,通常是指用来存放程序中未初始化的全局变量的一块内存区域,在程序载入时由内核清0。
dec(decimal的缩写,即十进制数)是text,data和bss的算术和。hex是指dec的十六进制值。
6、关于MRS新建工程编译报错
若新建工程编译报错如下:
riscv-none-embed-gcc:not found
可按照下图方法检查:
${eclipse_home}\\toolchain\RISC-V Embedded GCC\bin
7、关于MRS工程仿真对FLASH的限制
使用MRS对MCU进行仿真时,会对非零等待区域进行限制,若要解除限制,需要加一个参数,如下图,注意MRS版本要1.85版本。
8、关于使用openOCD锁定CH32V30x系列芯片
锁定是指读保护的可以使用下面指令:
openocd -f wch-riscv.cfg -c init -c halt -c "flash protect_check wch_riscv " -c reset -c exit 查询
openocd -f wch-riscv.cfg -c init -c halt -c "flash protect wch_riscv 0 last off" -c exit 解除
openocd -f wch-riscv.cfg -c init -c halt -c "flash protect wch_riscv 0 last on" -c exit 使能
9、关于修改MRS生成的bin文件名字
可参考下图配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~