MPC5744P
1.flash区的操作
需要划分一个flash块来存储变量,在flash.ld文件中,
cal : org = 0x00800000, len = 16K
.cal_info :
{
KEEP(*(.cal_info))
} > cal
然后将变量的地址定位到这个flash块中,也就是将变量放在这个地址中。方法如下:
#define CALIBRATION_SEG attribute ((section(“.cal_info”)));
unsigned char CALIBRATION_SEG dengstatus=0;
补充:如果将变量全部定位到ram中等待一次标定结束,将这些变量全部放置在flash中。这种感觉也有问题,是不是每次标定结束向flash里面写数据,那么以前存入的数据就会覆盖。所以他是一次标定改变一次数据,改变一次以前的状态。想不明白。这部分一切的基础都是flash驱动的写法。**可以说flash的驱动决定了这个标定的基础。
2.can的驱动
ccp的can驱动只需要两个节点即可,即只需要cro与dto两个节点的id,然后有接收和发送函数,can初始化函数。
接收函数用来接收cro节点发送来的命令,发送函数用来发送dto节点通过ccp驱动解析完cro的命令做出的反应数据,将其发送到dto(上位机),通过这种方式实现了ccp协议中CRM模式的运行。如果用canape进行标定还需要设置ecu的地址。
ecu的地址设置的作用是在ccp驱动的connect命令时,加了判断ecu的地址么,如果canape设置的地址不对,那么连接(connect)命令就不会通过。应该是这样。
这里还有一点,这里写的接收发送命令都没有用结构体,好久没用到了。直接给寄存器直接给了值。哈哈哈哈哈哈哈哈。
3.ccp驱动
ccp驱动总的来说就是三个文件,ccp.c,ccp.h,ccppar.h,三个文件就是ccp驱动的一切。
因为ccp驱动的函数都是采用判断宏的方法,因此ccppar.h文件使用拉埃定义宏的,你用到了哪个命令需要在这个文件里面定义一个宏来满足ccp驱动里面对宏是否定义的判断,才能接着运行命令,还有ecu地址,dto,cro的地址,daq数目等都是在这里定义的。
ccp.h文件是用来将各种ccp驱动的命令进行宏定义(对这些命令进行宏定义应该单纯是为了实现ccp驱动的通用性,哪款单片机都可以对其进行修改,即可使用),还有将ccp驱动中的标志位进行宏定义。ccp驱动中使用到的结构体,还有就是声明ccp.c里面使用的函数以及其全局变量。
ccp.c文件里面包括ccp初始化,这个初始化就是将所有的状态还有命令进行初始化(他的初始化使用了一个结构体对其进行了初始化)。然后就是ccp的各种命令的函数。整个ccp驱动最关键的函数就是ccpCommand()**这个函数包含了所有的ccp命令。
每款单片机如果需要进行ccp协议的标定那么这个函数里面的命令需要修改,别人的例程只是提供给你个思路,具体的名利还是需要自己修改的。
备注;还有MPC5744P的ccp命令我只进行了CRM这一部分的命令测试,具体的DAQ模式的命令没有进行。以后写其它单片机需要自己加上。