开发者学堂课程【平头哥剑池 CDK 功能及开发实战:5.3 芯片SDK开发:算法工程的二次开发】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/61/detail/1132
5.3 芯片SDK开发:算法工程的二次开发
上节课讲解 cdk 中的算法文件的工作原理及如何在 cdk 中创建一个算法文件,本次课程讲解算法工程的开发步骤。
上节课提到了算法工程分为这四个步骤,在做算法步骤需要进行二次开发的是这三个部分,第一 flash 设备描述,需要按照 flash 实际的参数去填写 flash 的描述信息。第二是 flash 接口的实现,我们根据具体的 flash 硬件设备特性去完成 flash 标准接口的逻辑。第三关于 buffer 数据交互的调整,根据芯片的大小来设置 buffer 的大小。因为 buffer 讲到是 pc 端的带商品镜像跟算法交互的数据传输的 buffer 的区域,这个区域理论上设置的越大其交互树状会议越少,使得整个 flash 烧写的速度就会变快。涉及到小方面是 flash 烧写速度会明显降低,会议需要根据目标端的具体的大小尽可能的设置较大的 buffer 最后一步是根据工作原理调试系统。演示 cdk 中做的二次开发需要的内容:
创建完成一个 flash 计算工程以后,它包含 arch、inc、script、src 目录,真正需要二次开发的是 src 目录下的三个文件,首先观察 flashDev.c 就是 flash的描述工程,这里我们只需要按照注释的要求逐个去填写即可,第一项是保留不进行修改,第二项是填写 flash 的名称即应聘设备上的应聘名称,填写所用 cpu 的型号,第三项是 flash 的 id ,此 id 是作为 flash 标识,起显示作用。第四项是 flash的类型,根据 flash 的类型去填写字符串。下面区域不进行修改。可以直接访问的方式是为了表示 flash 空间是否可以直接读取,如果这里配置的是1,那么后续配置进行读 flash 的操作的时候,就不会调用需要二次接发开口的 flashread 接口;反之,若此处配置调用0,那么后续配置调用 flashread 接口读取 flash 的内容,最后是 flash 空间的配比,支持多个 flash 区域的配置。每个 flash 配置都是由起始地址以及每一个 second、size 组成,根据硬件的实际指标保持默认配比即可。
第二部分是在慢函数点 c 的 j_rwbuffer 数据的大小,默认是4k 的大小,根据自身亲切的 RAM 空间配置,尽可能配置相适应的 buffer 大小。需要改进的非文件,其中每一个标有 to do 的位置是需要做接口开发的全部内容包含上节课讲到的 init、uninit、program、keypuis、takesome 的一个接口根据我们的硬件行为完成具体的逻辑。硬件如果进行 flash 操作之前需要进行硬件相关的配置这里的 demo 不需要进行配置。uninit 是所有 flash 配置之后所有的 flash 硬件的一些初始化。flash的id 需要返回之前的 scvc 描述的 id,program将我们必要烧写到数据烧写到 flash 区间当中,第一个参数 dst 是 flash 需要编程的地址,第二个是原地址,第三个是需要双写数据的长度。会把这个内存上面的 longs 常数去双写到 dest 所在的位置,因为在实际的演示当中是用一个 reck 模拟 flash,所以需要双写的数据直接复制到目标地址即可。简单的数据转移过程,此时完成数据 program 接口。Read 接口如果说是第一位参数 diredly 选择的是1,其不会调用,不做任何操作。Erase 是 second 操作,该地址是 second 对齐首地址,long 是需要开出的地址,erase 是需要整片擦除的地址。
此处是模拟的需要擦除的内容,将需要擦除的内容直接写下来即可,再去模拟整个 flash 擦除的操作。因为前面描述的 flashsize 是 next 8000的 size ,这里以 next 8000为数据长度,把i作为地址,进行地址上的操作,将8000区域所有数据值改为1.takesome在 flash 是读取情况下直接复制到业务逻辑即可。可以将 flashface 的开发工作完成。由图可知是 flash 模拟的擦除内容进行简单开发,实际开发要比演示更加复杂。为了后续开发手段,在 flash 驱动过程中加入一些 src 的驱动,建议大家将每个接口的数据进行打印,为后续做 flash 烧写调序进行铺垫。
本次课程就到这里,下节课为大家讲解如何调试并验证 flash 能否正常工作。