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文件名字

可参考下图配置

 

 

 

posted @ 2023-10-23 14:55  ZaiLi  阅读(355)  评论(0编辑  收藏  举报