MounRiver使用技巧及配置7

发布时间 2023-10-23 15:00:51作者: ZaiLi

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版本。