开发者学堂课程【平头哥剑池 CDK 功能及开发实战:5.4 芯片SDK开发:算法工程的调试和使用】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/61/detail/1133
5.4 芯片SDK开发:算法工程的调试和使用
主要内容
一、操作
二、调试
三、发布
上节课是关于算法工程的二次开发的一些基本要领,本节课是关于算法工程的调试和使用。
一、操作
有一个开发完成的算法工程,进行调试。配置算法工程的编译选项目的是保证他是O0编,即不优化得到更准确的调试精度。
择 build 或 rebuild 算法工程
将 硬件CD link 连接开发板,并连接至 SDK 中,选择divide tab连接方式为 ICE 并单击 seeing。
确定开发板已连接,且开发板型号与算法工程型号相匹配。
点击调试按钮,开始调试,算法工程已经进入算法的 main 函数。
二 、调试
为了更好的调试算法,下面首先介绍一下算法工程如何与之前所介绍
的接口进行配合,进而实现烧写。
1.框架介绍
算法配置的核心是 do while 的循环,通过g_ func 全局变量控制每次进入循环的入口。入口即上次课程所进行的二次开发的接口。
对于 flash program ,flash read 等需要参数的端口,他们带烧写的数据所对应的都是 g_rw buffer 数据空间,需要进行操作的 flash地址是 g_dst address的全局变量。G_ length是需要操作的目标地址的宽度或者是buffer的宽度。SDK 通过控制一些全局变量,调用真正的接口,去实现真正的操作。
2.以烧写目标为例
IDE SDK 设置带烧写的目标地址:例如将全局变量的地址设置为 flash
地址0x0
(1)将镜像文件中需要烧写到目标地址的数据下载到 g_rw buffer 中。
(2)将 g_rw buffer 的长度设置为全局变量。
(3)关机键是将 g_func 设置成 program 对应的1。
(4)运行。程序会进入switch case语句中调用 flash program 逻辑,从而实现 buffer 点的数据烧写到具体的 flash 地址的目的。
程序不会一直运行,有 bkp labell 函数,它是一个汇编指令,执行了一个软断点,程序执行到此会停止。程序会始终停在这里,完成了一次flash操作。
这是CDK使用算法的控制逻辑实现烧写的目的。此控制逻辑也可以通过调试的手段模拟出来
3.调试 g_program 函数的正确性。
(1)将 g_func 值配置为1,将其拖动至窗口中修改g_func值为1
(2)修改目标地址,将 g_dst address 拖动至窗口中将其改写为0地址。
(3)验证目标地址长度,将 G_ length 拖动至窗口中,因为目的是验证长度,所以可以烧写一个较少的字节,即烧写一个 word 去验证其正确性。
(4)希望数组中的数据进行更新,需要设置g_rw buffer的值
首先查看g_rw buffer 的地址,可以看到地址在0x20000598的位置
地址中里面的内容目前是全0,将其地址前四个字节改写成需要烧写的值。
这时所有参数的设置全部完成,运行程序发现程序始终停在 bkp labell函数,无法运行到地址。
将 pc 的值直接设置在 return 寄存器中。pc的值将不指向断点指令。在 RV 的 CPU 中, ra 表示 return address,将 return address的值复制给 pc。在刷新后,程序就会在入口处。
在程序 flash program 入口处设置一个断点。做完这些后重新运行程序,程序就会按照预期运行到所做的二次开发逻辑中。程序的目标地址是设置的0,buffer地址是g_rw buffer 的地址,数据长度是之前设计的四个字节。这样之前写的逻辑就会被执行,就是将buffer中的一个字节拷贝到0x0开始的目标内存中去,可以通过内存看0x0烧写地址是否正确,0x0位置上显示我们烧写的目标地址,就说明我们的逻辑是成功的,同理可以通过更新改变 g_ func 的值来验证函数逻辑是否正确。完成了flash接口的验证。
调试完成以后,在程序配置窗口 complete optimitation窗口中编译选项调整成o2,整个flash运行效率会提升。重新完成flash工程的编译,这样flash就可以完成发布。
三、发布
点击 open containing Folder
找到obj目录,找到对应的.alf文件就是flash算法文件,该文件可以用于后续学习的芯片SDK中。