前言
自己的第一篇帖子,本身也算是初学者,动机是这次让做的东西一直很难找到比较现成的学习资料快速解决问题,另外也做一下记录,文章内容中也有借鉴其他博主的,文末也会标注来源,当然也有可能缺失标注的请见谅。此外,文章中若有出现基础性或者概念性错误也请大家见谅,欢迎指出。
先介绍一下使用的环境,目前我有一份代码是需要实际运行在工程当中的,这样的话方便实际使用代码是不插着仿真器运行的,所以需要将代码烧录至Flash中,但是针对不同的工况,一些参数可能无法都适用,所以需要进行调参。和在线升级不同的是,我这种功能的需求只需要对一些数字变量进行修改即可代码主体是不需要进行修改的:具体就是不接仿真器,通过CAN通讯,使用上位机进行调参,合适之后,由上位机发送指令,进行烧录保存。断电之后再上电,参数是刚刚调参之后的【后续下一步可能就要研究基于dsp28335的can升级方案 bootloader、上位机等,但是那个工作量可能有点大,目前我估计是不太行的】。
芯片:dsp28335 编程:CCS 8.2 上位机:Labview 2020 CAN通讯:GY8508盒
一、运行区别与cmd文件
1.运行区别
对于DSP芯片中代码运行方式,我目前接触到的就两种,一种是在RAM中运行,一般是接仿真器,让所有的程序与参数都在RAM中运行,在线编写调试代码的时候使用的;另外一种是在FLASH中运行,通常是通过仿真器在CCS里操作,将代码烧录至DSP芯片的FLASH中,再次上电时不接仿真器也可以运行代码。因为在写cmd文件时,即使是烧录至FLASH中也不会将所有的内容都分配到FLASH区域,毕竟代码在运行中肯定会存在不断变化的变量,这些变量一般都会分配到RAM区域,但是程序主体还是会在FLASH里运行的,这个时候如果通过上位机与DSP进行通讯也可实现调参的功能,但是一旦掉电后,调过的参数是没办法直接保存到FLASH区域的,因为这时候上位机通讯的变量部分其实都在RAM当中,这不符合我的预期要求,但是我又不能每次调完参数后在程序里保存后再重新用仿真器烧写一遍,这在简易程度上不符合要求,所以需要用到 FALSH API 函数实现FLASH的擦写功能。
针对RAM和FLASH中的运行速度,二者是有区别的【1】,理论上来说RAM中的运行速度要快一点,所以这也涉及到如果你的代码中用到了延时函数且需要烧录到FLASH中运行,那么你需要在通过FLASH运行时,将延时函数复制到RAM中运行,否则可能会出错。
2.cmd文件
接仿真器RAM运行的cmd文件我就不说明了,现在说明一下FALSH运行的cmd文件,首先是官方的FLASH 运行cmd文件,这里我之前和别人交流过,可能不同版本的文件名不太一样,我这里的名字是F28335.cmd。
MEMORY
{
PAGE 0: /* Program Memory */
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */
RAML0 : origin = 0x008000, length = 0x001000 /* on-chip RAM block L0 */
RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */
RAML2 : origin = 0x00A000, length = 0x001000 /* on-chip RAM block L2 */
RAML3 : origin = 0x00B000, length = 0x001000 /* on-chip RAM block L3 */
ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */
ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */
FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */
FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */
FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */
FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */
FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */
FLASHC : origin = 0x328000, l