关于MounRiver编译器配置的若干问题
一、在工程中单独设置预编译宏
二、将变量存放到指定RAM地址
三、串口打印浮点数
四、添加64位数据处理
五、使用math数学库
六、关闭仿真时自动清dataflash功能
七、配置printf待打印数据不加\n换行
八、修改编译器输出hex文件的位置 RISC-V单片机集成开发环境(IDE) MounRiver Studio 修改hex输出路径 - debugdabiaoge - 博客园 (cnblogs.com)
九、编译器生成bin文件 MRS CH573 CH582生成BIN文件 - debugdabiaoge - 博客园 (cnblogs.com)
十、const修饰的只读数据放在指定flash区域中 Mounriver修改数组地址 - SweetTea_lllpc - 博客园 (cnblogs.com)
十一、208工程显示编译后占用的flash与ram大小 RISC-V MCU IDE MRS(MounRiver Studio)开发之: 编译后打印FLASH及RAM使用占比信息_MounRiver_Studio的博客-CSDN博客_mounriver studio flash size
一、为了减小EVT大小,沁恒官方整合了一些文件作为公共文件,由多个工程共同使用。比如说调试BLE例程和蓝牙mesh例程时,有config.h这个文件,直接在该文件中修改宏,会影响到很多工程。可以在右键工程名->中设置宏定义,只针对这一个工程配置宏。比如说我在某工程中加一个HAL_SLEEP宏置1,见下图。


配置好之后,该工程config头文件中的HAL_SLEEP宏会变成灰色,表示此处的宏不生效,以工程配置中的编译预处理为准。

二、若要指定变量在某个RAM地址,需要在同①的右键工程名->Properties配置中添加一行代码,在Linker flags中加入--section-start=.XXX=RAM中的起始地址,XXX为地址名,如下图。在582芯片中,这个值要大一点,前面部分RAM在其他特定的地方有用到,当然也不能超过582RAM的最大值32K。笔者这里用0x20001000,编译后是可以运行的。

在定义变量时使用__attribute__((section(".XXX")))修饰一下,如下图。即使此处赋了初始值,实际分配的值仍是随机值,需要在程序中再赋一下值。此值在RAM保持,不会受到按键复位的影响,但断电丢失。

编译之后可以在工程的obj文件夹下的.map文件中找到地址映射的位置,如下图。

三、沁恒目前的57x、58x系列蓝牙芯片,均不支持硬件浮点运算,不过默认是支持硬件整型程序和软件浮点运算的。软件浮点运算可以直接计算和使用,只是默认设置直接printf打印,是打印不出来的。若要打印浮点数,需要在右键工程名->Properties配置,在下图位置,勾选一下打印库的选项,二选一。使用的库相比之前多了,根据选择的库不同,会占用相应的更多的flash和ram。勾选后点击Apply应用以及Apply and Close应用并关闭,确保配置成功保存。注意这两个库不要与wchprintf一起勾选,可能会无法打印。如果既要能打印浮点数,又要能不加\n换行,勾选一个wchprintfloat即可。

框选前↓

1框选后↓

2框选后↓

还有一种方法,按②中的操作,去掉勾选,使用完整库,也能打印浮点型,但是库大了很多,不推荐。②例中库增量比较小是由于②中没有涉及到float类型的运算。

四、582默认使用32位运算,若想使用64位运算,可以在右键工程名->Properties配置中,去掉下图中的勾选来实现。从nano库改为完整大小的库,使用的库变大而占用更多的flash和ram。

去掉框选前↓

去掉框选后↓

五、若要使用数学公式,在包含了math.h之后,还需要增加下math库。右键工程名->Properties配置,在下图Libraries中,添加math库的简写m即可。

六、使用WCH-LINK仿真时,默认是清空dataflash的,需要在debug configurations中针对仿真的工程添加一行配置,在运行仿真时不会自动清空dataflash。

七、默认情况配置下使用printf函数,需要在待打印的字符串后加\n换行,串口助手中才会显示全部数据,否则将会缓存一块数据,满了再全部输出打印。可以在右键工程名->Properties配置中,勾选下方的库,这样可以不用换行符,直接打印数据。注意wchprintf不要与③中的两个库一起勾选,可能会无法打印。如果既要能打印浮点数,又要能不加\n换行,勾选一个wchprintfloat即可。

八、修改编译器输出hex文件的位置 RISC-V单片机集成开发环境(IDE) MounRiver Studio 修改hex输出路径 - debugdabiaoge - 博客园 (cnblogs.com)
九、编译器生成bin文件 MRS CH573 CH582生成BIN文件 - debugdabiaoge - 博客园 (cnblogs.com)
十、const修饰的只读数据放在指定flash区域中 Mounriver修改数组地址 - SweetTea_lllpc - 博客园 (cnblogs.com)
十一、208工程显示编译后占用的flash与ram大小 RISC-V MCU IDE MRS(MounRiver Studio)开发之: 编译后打印FLASH及RAM使用占比信息_MounRiver_Studio的博客-CSDN博客_mounriver studio flash size
关于MounRiver编译器配置的若干问题的更多相关文章
- CSS预编译器配置-------LESS Sass Stylus webstorm
预编译器配置说明 开头语,发挥CSS预处器的作用是一种很有挑战性的事情.CSS预处器有不同的语言,就有不同的语法和功能. 语法 在使用CSS预处器之前最重要的是对语法的理解,幸运的是,这三种CSS预处 ...
- IntellJ IDEA 2017 激活编译器配置,读取多个配置文件
1.设置编译器,找到1,点击2 2.输入设置命令:--spring.profiles.active=test,如果是多个文件输入--spring.profiles.active=test,dev 3. ...
- wepy build 错误 [Error] 未发现相关 less 编译器配置,请检查wepy.config.js文件。
[Error] 未发现相关 less 编译器配置,请检查wepy.config.js文件. 缺少less包,npm install less -d
- Buildroot 外部编译器配置
/****************************************************************************** * Buildroot 外部编译器配置 ...
- gcc-linaro-arm-linux-gnueabihf交叉编译器配置
系统Ubuntu14.04 版本:gcc 版本 4.7.3 20130328 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 ...
- c/c++编译器配置(交叉编译重要参数)、交叉编译动态库与as配置、mk初步
gcc/g++/clang,相当于javac: 了解c/c++编译器的基本使用,能够在后续移植第三方框架进行交叉编译时,清楚的了解应该传递什么参数. clang: clang 是一个C.C++.Obj ...
- C文件 CMakeList.txt编译器配置错误的问题 error:invalid conversion from 'int' to 'LAYER_TYPE' [-fpermissive]....
在编译C工程时,遇到了如下错误: 一般看到类型错误,主要考虑是不是编译器错了. 以下引用:https://www.cnblogs.com/liushui-sky/p/7729838.html 后缀为. ...
- win10下visual studio code安装及mingw C/C++编译器配置,launch.json和task.json文件的配置
快一年了,我竟然还有脸回来..... 过去一年,由于毕设.找工作的原因,发生太多变故,所以一直没更(最主要的原因还是毅力不够...),至于发生了什么事,以后想说的时候再更吧..依然是小白,下面说正事. ...
- LaTeX 环境安装&编译器配置
推荐网站:https://www.latexstudio.net/articles/ (基本所有的latex疑惑都可以在这里得到解决) 入门视频:两小时短小精悍,让你轻松入门,https://www. ...
- windows下 gvim8.0 编译器配置
最近由于各种原因,IDE从source insight换成了vim,参考了诸多博客的文章,折腾了好久折腾了个大概的样子,现在总结一下经验: 主要参考: 改造vim变成source insight Wi ...
随机推荐
- ApiView/Request类源码分析/序列化器
内容概要 ApiView+JsonResponse编写接口 ApiView+Response编写接口 ApiView源码解析 Request对象源码分析 序列化器介绍和快速使用/反序列化 反序列化的校 ...
- 【Android】移除 Android frameworks 层,当 Linux 系统使用。(服务移除篇)
前言说明 此文章仅作为技术经验记录,核心思想,就是在 init.rc 里面移除服务,致使 frameworks 不被启动,其它不便多说. 此文章内容为系统服务移除篇,最终实现的效果是 Android ...
- LeetCode_单周赛_328
6291. 数组元素和与数字和的绝对差 代码 模拟即可 class Solution { public int differenceOfSum(int[] nums) { int ans = 0; i ...
- JAVA虚拟机18---方法调用
1.简介 方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还未涉及方法内部的具体运行过程.在程序运行时,进行方法调用是最普遍.最频繁的操作 ...
- 多人协同开发,git workflow 提高团队协作能力
集美们,还在为工作多年而只会使用简单的git指令被质疑是假简历而烦恼吗. Don't worry! || 今天给带来大家一个git攻略指南.成为大手子,参与开源大项目指日可待. . Git 这是 ...
- Vue3 中的组件 provide和inject 传值、获取组件实例的方法getCurrentInstance()
一. provide和inject(依赖注入) 1:在父级组件中提供数据 语法:provide('提供给子组件的变量名',提供给子组件的数据) 2: 在子级组件中获取收据 ...
- Python GDAL读取栅格数据并基于质量评估波段QA对指定数据加以筛选掩膜
本文介绍基于Python语言中gdal模块,对遥感影像数据进行栅格读取与计算,同时基于QA波段对像元加以筛选.掩膜的操作. 本文所要实现的需求具体为:现有自行计算的全球叶面积指数(LAI).t ...
- slate源码解析(一)- 序言
笔者从大学时期就开始接触的前端,在刚去实习的时候就被导师安排去做内网的一个小富文本工具.之后从毕业后干的第一份工作游戏客户端,到现在做着可视化相关的前端工作,都有在做富文本相关的内容.可以说是和富文本 ...
- LG P4449 & JZOJ 于神之怒
\(\text{Problem}\) JZOJ上,求 \[\sum_{i=1}^n \sum_{j=1}^m \gcd(i,j)^k \] 对 \(10^9+7\) 取模 \(n,m,k \le 5 ...
- Luogu P1505.[国家集训队]旅游
题解 真真正正是个码农题,不过很套路,熟练就打得很快,不过要用点维护边的信息在 \(\text{LCA}\) 出要注意,不能处理此点的信息 \(Code\) #include<cstdio> ...