《DN8P1开发指南_V1.0》第四章 RA8P1初体验
第四章 RA8P1初体验
本章,我们不介绍如何编写代码,而是向大家介绍如何编译、串口下载、仿真器下载、仿真调试开发板例程,体验一下RA8P1的开发流程,并介绍e²studio的一些使用技巧,通过本章的学习,将对RA8P1的开发流程和e²studio使用有个大概了解,为后续深入学习打好基础。
本章将分为如下几个小节:
4.1 使用e²studio编译例程
4.2 使用串口下载程序
4.3 使用E2 lite下载与调试程序
4.4 e²studio使用技巧
4.1 使用e²studio编译例程-
我们在编写完代码以后,需要对代码进行编译,编译成功以后,才能下载到开发板进行验证、调试等操作。ATK-DNRA8P1开发板标准例程源码路径:A盘4,程序源码,如图4.1.1所示:

图4.1.1 ATK-DNRA8P1开发板例程源码
本这里我们先解压该压缩包,得到FSP6.4.0版本的标准例程源码如图4.1.2所示:

图4.1.2 标准例程-FSP6.4.0版本
基础例程总共40多个实验的标准例程,部分实验有多个例程,比如定时器实验、ADC实验和DAC实验等。
秉着简单易懂的原则,我们选择:01_led 作为RA8P1入门体验,例程目录如图4.1.3所示:

图4.1.3 01_led例程工程目录结构
工程目录下有8个文件夹,我们将在后续“新建FSP基础工程”这一章给大家详细介绍其作用(其实看文件夹名字的字面意思基本就知道是做啥用的了),这里我们不多说。
注意:例程必须在e²studio开发工具上导入工程才能打开。
双击e²studio开发工具,然后导入01_led工程,进入编辑界面,如图4.1.5所示:

图4.1.5 e²studio打开01_led程
点击当前工程,然后右键单击“构建项目”,这样就可以编译01_led例程了。下载代码需要点击“调试方式”,然后单击“3 Renesas GDB Hardware Debugging”选项下载代码。
若是第一次下载,则必须进行下载配置,配置流程如下所示:
1,构建项目,完成后点击“调试方式”“3 Renesas GDB Hardware Debugging”进入下载器选择界面,如下图所示:

图4.1.6 选择下载器
2,选择“E2 Lite(ARM)”下载器,然后单击“确定”,进入目标芯片界面,如下图所示:

图4.1.7 选择下载目标芯片
3,搜索“R7KA8P1KF”,然后选择R7KA8P1KF_CPU0目标芯片,最后点击“确定”如下图所示:

图4.1.8 选择目标芯片
此时,我们可以看到控制台提示下载器连接过程,如下图所示:

图4.1.9 下载调试成功
4.2 使用串口下载程序
RA8P1常见的下载方式有三种:

表4.2.1 RA8P1常见下载方式对比
经过以上对比,因此我们推荐使用USB 下载(没有仿真器的情况下)和SWD下载(有仿真器的情况下),强烈推荐大家购买一个仿真器(如E2 Lite等),可以极大的方便学习和开发。
下面,我们就一步步教大家如何在实验平台上利用USB口来下载代码。
首先确保开发板接线正确,并成功上电,默认的出厂设置如图4.2.1所示:

图4.2.1 开发板设置
上图中,红色框框USB口使用USB数据线连接到PC机上,然后安装Renesas_Flash工具。该工具安装流程如下:
1,打开网址: https://www.renesas.cn/zh/software-tool/renesas-flash-programmer-programming-gui ,并注册且登录账号。
2,下载Renesas_Flash工具,目前最新的Renesas_Flash工具为3.23版本

图4.2.2 下载Renesas_Flash工具
3,点击“Renesas Flash Programmer V3.23.00 Windows”链接,然后点击许可下载,如下图所示:

图4.2.3 下载Renesas_Flash工具
4,解压并双击“Renesas_Flash_Programmer_Package_V32300.exe”安装包。如下图所示:

图4.2.4 安装Renesas_Flash工具
5,单击“Next”,进入许可界面。如下图所示:

图4.2.5 许可界面
6,单击“Next”安装Renesas_Flash工具。完成完成后,提示安装完成界面。

图4.2.6 安装Renesas_Flash工具成功
7,双击打开Renesas_Flash工具,然后点击FileNew project选项新建工程。如下图所示:

图4.2.7 新建Renesas_Flash工程
8,长按BOOT按键,然后讲数据线插入到PC机,直到电脑能识别到“RA USB Boot(CDC)(COMX)”端口号。如下图所示:

图4.2.8 识别USB下载端口
9,根据下图流程,连接目标芯片。如下图所示:

图4.2.9 连接目标芯片
注意:必须等到Renesas_Flash工具连接且下载代码成功后才能放开BOOT按键,否则连接失败。
10,选择下载的hex/bin文件,然后单击“Start”下载代码。

至此,RA8P1使用FS USB下载程序完成。其他实验例程,大家可以用同样的方法进行下载。注意:必须长按BOOT到下载结束。
4.2.1 使用E2 Lites仿真调试程序
在正常编译完例程以后(0错误,0警告),点击:
仿真与下载。如下图所示:

图4.2.1.1 仿真与下载
开始仿真会在startup.c下的SystemInit函数开始,如图4.3.2.1所示:

图4.3.2.1 开始仿真
1, 全速运行:让程序从当前暂停位置,一直自动往下跑,直到断点停止,或者错误停止。
2, 单步运行:一次只执行一行代码,执行完立刻停下。
3, 单步跳出:从当前进入的函数里,直接跳出去,执行完剩下所有代码,回到调用处停下。
RA8P1相关寄存器数值,可在控制台下查看,如下图所示:

图4.3.2.2 RA8P1寄存器数值
查看相关变量的数值,可点击该变量,然后右键点击“添加监看表达式…”,如下图所示:

图4.3.2.3 添加监看变量
这样我们可以在调试区域查看该变量的实时数值、地址和类型,如下图所示:

图4.3.2.4 监看变量
注意:e²studio导入例程时,该例程必须在全英文路径下保存,否则会提示打开失败。
4.2.2 仿真调试注意事项
1、使用E2 Lite在e²studio中进行仿真调试时,不支持直接重启仿真会话。若需要重新开始调试,必须先停止当前仿真,再重新启动调试功能。
2、软件仿真存在功能局限、适配性差等问题,且目前E2 Lite硬件仿真器性价比高、使用便捷。硬件仿真贴合芯片真实运行状态,调试结果更精准可靠,因此本教程仅讲解E2 Lite 硬件仿真,不再介绍软件仿真相关内容。
3、借助仿真器排查代码Bug,是嵌入式软件开发工程师必备的基础技能。e²studio搭配E2 Lite提供了完善的调试工具与观测窗口,勤加练习就能熟练掌握调试方法。熟练运用仿真调试,能大幅提升问题排查效率,对独立开展项目开发至关重要,建议大家多实操练习。
4、调试代码切忌浅尝辄止,排查问题需遵循完整思路:先结合设备实际运行现象分析故障,定位疑似出错的代码区域;接着在对应代码行设置断点,实时查看变量、寄存器数值,对比运行状态与预期效果是否相符,逐步锁定问题根源并修复。特别提醒:遇到程序异常时,不要仅停留在顶层函数就判定故障,需逐层进入子函数跟踪运行逻辑,深入到底层代码(必要时查看汇编代码),才能更快找准真正原因。
4.3 e²studio使用技巧
本节,我们将向大家介绍e²studio软件的一些使用技巧,这些技巧在代码编辑和编写方面会非常有用,希望大家好好掌握,最好实际操作一下,加深印象。
4.3.1 规范注释
规范注释主要用于提升代码可读性,让程序结构、功能、参数、注意事项一目了然。如图4.3.1.1所示:

图4.3.1.1 代码格式规范
4.3.2 语法检测&代码提示
e²studio提供了代码提示与动态语法检测功能,使得e²studio的编辑器越来越好用了,这里我们简单说一下如何设置,右键属性C/C++构建设置工具设置Warnings,如图4.3.2.1所示:

图4.3.2.1 语法警告提示设置
1,Inhibit all warnings (-w)
作用:关闭所有警告信息。
解读:选了它,编译器就 “装聋作哑”,什么警告都不报,只看语法错误。
推荐:开发阶段不要选,它会掩盖大量潜在问题。
2,Enable all warnings (-Wall)
作用:开启一组基础、但非常有用的警告,是GCC的 “标准警告套餐”。未使用的变量、类型不匹配、返回值缺失、格式字符串错误等。
推荐:强烈建议勾选,这是嵌入式开发的基本安全线。
3,Enable extra warnings (-Wextra)
作用:在-Wall基础上,再开启更多额外的警告。比较运算符的逻辑错误(如 if (a > b > c))、枚举值与非枚举的比较、有符号 / 无符号的比较等。
推荐:强烈建议勾选,能发现很多逻辑陷阱。
4,Warn for implicit conversions (-Wconversion)
作用:对可能改变值的隐式类型转换发出警告。比如 uint8_t a = 1000;(数值溢出)、int 赋值给 short 可能截断、有符号数赋值给无符号数导致负数变成大正数等。
推荐:建议勾选,在嵌入式开发中,类型溢出是常见Bug来源。
5,Warn for uninitialized variables (-Wuninitialized)
作用:对使用了未初始化的变量发出警告。比如 int a; if (a > 0) { ... },a 的值是随机的,行为完全不可预测。
推荐:强烈建议勾选,这是严重的潜在问题。
6,Warn for various unused elements (-Wunused)
作用:对未使用的变量、函数、标签、参数发出警告。定义了变量但没用到、函数参数声明了但未使用等,帮助清理 “垃圾代码”。
推荐:建议勾选,让代码更干净。
7,Warn for shadowed variables (-Wshadow)
作用:当局部变量 “遮蔽” 了全局变量或外层同名变量时发出警告。
推荐:建议勾选,变量遮蔽极易导致逻辑错误。
8,Warn if it depends on the "sizeof" a function(-Wpointer-arith)
作用:对指针算术运算中的错误用法发出警告。比如对函数指针做 sizeof()、对 void* 指针进行加减操作等。
推荐:建议勾选,防止指针相关的低级错误。
9,Warn if structures are returned (-Waggregate-return)
作用:当函数返回结构体或联合体时发出警告。在嵌入式开发中,返回大结构体容易导致栈溢出或性能问题,推荐用指针传递。
推荐:建议勾选,提醒你优化代码。
10,Warn for undeclared global functions (-Wmissing-declarations)
作用:对没有声明原型的全局函数发出警告。比如在 .c 文件里定义了 void func();,但没有在 .h 文件里声明,其他文件调用时可能类型不匹配。
推荐:建议勾选,强制规范头文件声明,避免跨文件调用错误。
11,Generate errors instead of warnings (-Werror)
作用:把所有警告都当成错误处理,警告不解决,编译就不通过。这是强制你解决所有警告的 “狠招”,适合在项目稳定后、发布前使用。
推荐:开发初期不建议勾选,会导致很多小问题卡住编译;项目后期或CI/CD构建时建议开启。
12,Warn if a global function has no prototype (-Wmissing-prototypes)
作用:对没有声明原型的外部函数发出警告,比 -Wmissing-declarations 更严格。
推荐:建议勾选,确保所有全局函数都有正确的声明。
13,Warn if a function has no argument type (-Wstrict-prototypes)
作用:对旧式 C 函数声明(如 void func() 而非 void func(void))发出警告。比如void func() 在 C 里表示 “参数类型未指定”,这是不安全的,推荐使用 void func(void) 明确表示无参数。
推荐:建议勾选,强制使用标准 C 语法。
14,Warn if a cast is wrong (-Wbad-function-cast)
作用:对错误的函数指针类型转换发出警告。比如把返回 int 的函数强制转换成返回 void* 的函数指针,类型不匹配。
推荐:建议勾选,防止函数调用时的类型错误。
15,Emit section containing metadata on function stack sizes (-fstack-size)
作用:让编译器生成每个函数栈使用量的元数据,方便后续分析栈使用情况。对嵌入式开发非常有用,可以帮你定位栈溢出风险。
推荐:建议勾选,尤其是在开发复杂项目时。
4.3.3 代码编辑技巧
这里给大家介绍几个我常用的技巧,这些小技巧能给我们的代码编辑带来很大的方便,相信对你的代码编写一定会有所帮助。
- TAB键的妙用
首先要介绍的就是TAB键的使用,这个键在很多编译器里面都是用来空位的,每按一下移空几个位。如果你是经常编写程序的对这个键一定再熟悉不过了。但是e²studio的TAB键和一般编译器的TAB键有不同的地方,和C++的TAB键差不多。e²studio的TAB键支持块操作。也就是可以让一片代码整体右移固定的几个位,也可以通过SHIFT+TAB键整体左移固定的几个位。
假设我们前面的串口1中断回调函数如图4.3.3.1所示:

图4.3.3.1 头大的代码
上图的代码很不规范,这还只是短短的20来行代码,如果你的代码有几千行,全部是这个样子,不头大才怪。这时我们就可以通过TAB键的妙用来快速修改为比较规范的代码格式。
选中一块然后按TAB键,你可以看到整块代码都跟着右移了一定距离,如图4.3.3.2所示:

图4.3.3.2 代码整体偏移
接下来我们就是要多选几次,然后多按几次TAB键就可以达到迅速使代码规范化的目的,最终效果如图4.3.3.3所示:

图4.3.3.3 修改后的代码
图4.3.3.3中的代码相对于图4.3.3.1中的要好看多了,经过这样的整理之后,整个代码一下就变得有条理多了,看起来很舒服。
- 快速定位函数/变量被定义的地方
上一节,我们介绍了TAB键的功能,接下来我们介绍一下如何快速查看一个函数或者变量所定义的地方。

图4.3.3.4 快速定位
大家在调试代码或编写代码的时候,一定有想看看某个函数是在那个地方定义的,具体里面的内容是怎么样的,也可能想看看某个变量或数组是在哪个地方定义的等。尤其在调试代码或者看别人代码的时候,如果编译器没有快速定位的功能的时候,你只能慢慢的自己找,代码量比较少还好,如果代码量一大,那就郁闷了,有时候要花很久的时间来找这个函数到底在哪里。型号e²studio提供了这样的快速定位的功能。只要你把光标放到这个函数/变量(xxx)的上面(xxx为你想要查看的函数或变量的名字),然后右键,可以看到如图4.4.3.4所示的菜单栏。
在图4.3.3.4中,我们找到“打开声明” 这个地方,然后单击左键就可以快速跳到LED0(0)函数的定义处。如图4.3.3.5所示:

图4.4.3.5 定位结果
对于变量,我们也可以按这样的操作快速来定位这个变量被定义的地方,大大缩短了你查找代码的时间。
- 快速注释与快速消注释
接下来,我们介绍一下快速注释与快速消注释的方法。在调试代码的时候,你可能会想注释某一片的代码,来看看执行的情况,e²studio提供了这样的快速注释/消注释块代码的功能。也是通过右键实现的。这个操作比较简单,就是先选中你要注释的代码区,然后按下Ctrl+/快捷键就可以了。
以LED0(x)宏定义为例,比如我要注释掉下图中所选中区域的代码,如图4.3.3.6所示:

图4.3.3.6 选中要注释的区域
我们只要在选中了之后,选择右键,再选择AdvancedComment Selection就可以把这段代码注释掉了。执行这个操作以后的结果如图4.3.3.7所示:

图4.3.3.7 注释完毕
这样就快速的注释掉了一片代码,而在某些时候,我们又希望这段注释的代码能快速的取消注释。同样,按下Ctrl+/快捷键取消注释。
4.3.4 其他小技巧
除了前面介绍的几个比较常用的技巧,这里还介绍几个其他的小技巧,希望能让你的代码编写如虎添翼。
第一个是快速打开头文件。在将光标放到要打开的引用头文件上,然后长按Ctrl,鼠标点击该头文件,就可以快速打开这个文件了(XXX是你要打开的头文件名字)。如图4.4.4.1所示:

图4.3.4.1 快速打开头文件
第二个小技巧是查找字符串或者搜索文本功能。这个和WORD等很多文档操作的替换功能是差不多的,在e²studio里面查找替换的快捷键是“CTRL+H”。如图4.4.4.2所示界面:

图4.3.4.2 替换文本
这个查询的功能在有的时候是很有用的,它的用法与其他编辑工具或编译器的差不多,相信各位都不陌生了,这里就不啰嗦了。

浙公网安备 33010602011771号