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版本。
标签:技巧,stdout,section,配置,MRS,编译,报错,MounRiver,nop From: https://www.cnblogs.com/liaigu/p/17782451.html