MounRiver软件设置
进入编译设置。
目录
进入编译设置

头文件路径添加

目标文件类型输出设置

调试代码擦除问题
RSIC-V IDE MRS使用笔记(五):调试前代码擦除问题
【代码页擦】在调试IAP+APP的程序时,一般IAP的程序固定后就不需要再去调试了,只需要关注APP程序本身就可以了,但是直接调试APP的时候会默认使用全擦指令,导致IAP程序被擦除。这个时候我们只需要在APP程序调试配置页面添加如下图所示命令行参数,就可以在IAP程序已经下载进去的情况下,每次只修改APP部分的代码。OTA升级也可以使用类似的方式,即把非APP的程序合成一个bin文件下载进去,其他操作与IAP+APP下载方式一致。

-c page_erase

【调试前不重新下载代码】有时候我们在查找问题时发现只有重新上电才能复现,但是每次重新上电去复现问题时,代码没有改变,调试还是会去下载程序浪费时间,这个时候可以打开调试配置页面,勾选调试不擦除不下载选项,来解决此类问题。

将警告信息全部进行显示

勾选ENABLE all common warnings
const修饰的只读数据放在指定flash区域中
参考:Mounriver分配FLASH空间(CH573) - SweetTea_lllpc - 博客园
在KEIL中修改地址比较方便,在KEIL的Target中直接分配; 在MRS中无法这样修改,MRS中定义数组之后是由程序主动分配地址的,而无法达到自行分配的效果,因此需要通过修改LD文件进行分配FLASH地址。修改的办法是开辟一段空间,然后将数组放进去。例如:现在定义一个数组的大小为8K,那么我可以将原来的FLASH分区为FLASH1(440K)和FLASH2(8K),把数组放在FLASH2中。注意:如果FLASH2定义为8K,数组定义为9K,那么将该定义放入FLASH2中程序会报错。
MEMORY
{
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 400K
FLASH2 (rx) : ORIGIN = 400K, LENGTH = 20K
FLASH3 (rx) : ORIGIN = 420K, LENGTH = 28K
RAM (xrw) : ORIGIN = 0x20003800, LENGTH = 18K
}
.consumer_flash2 :
{
. = ALIGN(4);
}AT>FLASH2
.consumer_flash3 :
{
. = ALIGN(4);
}AT>FLASH3
FLASH修改完成,已成功分配3块空间,接下来验证并对每个空间使用。
2、分别使用FLASH2和FLASH3:
const uint8_t __attribute__((section(".consumer_flash2"))) user_data1[20] = {4,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0x0};
const uint8_t __attribute__((section(".consumer_flash3"))) user_data2[20] = {5,2,3,4,5,6,7,8,9,0xa,0xb,0xc,0xd,0xe,0x0};
加上打印(记得换行)
注:进行后编译会显示对应FLASH空间已经使用到,否则出现FLASH已经成功分配,但是没有占用空间,这里笔者的使用是加上打印。
PRINT("%x\r\n", user_data1);
PRINT("%d\r\n", user_data1[0]);
PRINT("%x\r\n", user_data2);
PRINT("%d\r\n", user_data2[0]);
常量定义在指定FLASH区域:
在ld文件的SECTIONS段添加如下:
.flash_test_address :
{
. = ALIGN(4); /*4字节对齐*/
. = ORIGIN(FLASH)+0x14000; /*ORIGIN(FLASH)为 MEMORY定义的FLASH的起始地址,指定到从FLASH起始的0x14000长度的位置*/
KEEP(*(SORT_NONE(.test_address_1))) /*链接时*KEEP()可以使得被标记段的内容不被清除*/
. = ALIGN(4);
} >FLASH AT>FLASH
定义:
__attribute__((section(".test_address_1"))) const uint8_t buf_1[] = {0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};/*地址为0x00014000*/
查看二进制文件:

数学库包含
有时候就算加了include“math.h”,也找不到数学函数,这个时候就需要包含数学库。

软件开发技巧总结:
在项目开发过程中需要有远程升级功能
首先我们需要添加工具,

在test.bat中我们只需要修改与本次项目bootloder程序的地址即可,此后编译就会生成boot与app的合并文件,与app的单独bin文件
这是test.bat的几段指令
set "bootloaderDir=C:\Users\shi\Desktop\CH32X035G8U6\CH32X03X_BootLoader\obj"
set "target=CH32X035G8U6"
del ..\obj\*_app.*
cmd/c ..\tool\mergehex -m %bootloaderDir%\ch32x03x_bootLoader.hex ..\obj\%target%.hex -o %target%_bootloader_app.hex
cmd/c ..\tool\hex2bin -m 0x100 ..\obj\%target%.hex
ren ..\obj\%target%.bin %ModelNumber%_app.bin
cmd/c ..\tool\hex2bin -m 0x100 ..\obj\%target%_bootloader_app.hex
copy ..\obj\%target%_bootloader_app.bin ..\obj\%ModelNumber%_bootloader_app.bin
del ..\obj\%target%_bootloader_app.hex %target%.hex
如果出现编译不过去就需要添加C++环境:下载安装链接如下:
Latest supported Visual C++ Redistributable downloads | Microsoft Learn
下载设置,生成多个bin文件和HEX文件我们可以在APP中进行下载选择设置。如下图所示

沁恒烧录器使用

点击DIPubTool_N_V3.50.exe,制作烧录工具的烧录文件

生成之后将,生成的文件放入SS文件夹里面

用TypeC连接烧录工具,点击运行exe文件

就可以将烧录文件下载到烧录器了。
烧录完成后使用烧录器电源供电,将USB连接到烧录器的Type_A上,点击s3按键即可下载
更多推荐



所有评论(0)