最近研究了一下ADS21062L的报告存储,发送的问题,对于本公司前辈们的程序不得不在此吐槽一下,不是因为自己的程序写的比别人好,而是以此为鉴,为了自己在以后的编程中代码编写更加规范。
先看初始化代码:
init_dsp0_rep:
r2=0;
dm(EVENT_REP_INT_NUM1)=r2;
dm(EVENT_REP_INT_NUM2)=r2;
r15=EVENTREPORT_BUFF;
dm(EVENTREPORT_BUFF_POINTER)=r15;
r14=0xff;
r0=dm(EVENT_REP_NUM1);
r1=dm(EVENT_REP_NUM2);
r0=r0 and r14;
r1=r1 and r14;
r3=EVENT_REP_NUM;
comp(r0,r2);
if LT jump init_dsp0_rep_01;
comp(r0,r3);
if GE jump init_dsp0_rep_01;
comp(r1,r2);
if LT jump init_dsp0_rep_03;
comp(r1,r3);
if GE jump init_dsp0_rep_03;
r10=EVENT_REP_LENGTH;
r10=r10*r0(uui);
r9=EVENTREPORT_GLOBAL;
r9=r9+r10;
dm(EVENT_REP_POINTER1)=r9;
jump init_dsp0_rep_end;
init_dsp0_rep_01: // num1
comp(r1,r2);
if LT jump init_dsp0_rep_02;
comp(r1,r3);
if GE jump init_dsp0_rep_02;
dm(EVENT_REP_NUM1)=r1;
jump init_dsp0_rep_05;
init_dsp0_rep_02: // num1 err, num2 err
r0=0;
dm(EVENT_REP_NUM1)=r0;
dm(EVENT_REP_NUM2)=r0;
jump init_dsp0_rep_05;
init_dsp0_rep_03: // num2 err
dm(EVENT_REP_NUM2)=r0;
init_dsp0_rep_05: // rep zone err,write report
r0=dm(EVENT_REP_NUM1);
r14=0xff;
r0=r0 and r14;
r10=EVENT_REP_LENGTH;
r10=r0*r10(uui);
r9=EVENTREPORT_GLOBAL;
r9=r9+r10;
dm(EVENT_REP_POINTER1)=r9;
init_dsp0_rep_end:
里面有太多的大写的东东,不知道是变量还是宏定义,如:
EVENT_REP_INT_NUM1
EVENT_REP_INT_NUM2
EVENTREPORT_BUFF
EVENTREPORT_BUFF_POINTER
EVENT_REP_NUM1
EVENT_REP_NUM2
EVENT_REP_NUM
EVENT_REP_LENGTH
EVENTREPORT_GLOBAL
EVENT_REP_POINTER1
所以看这种代码很累,如果你一下看得懂,那你是大神,比我厉害多了。所以程序的编程规范个人觉得很重要,像这种代码就是小公司没有编程要求和代码规范审核的结果,
下面我们就来解析一下这个具体的大写的东东,
EVENT_REP_INT_NUM1 :变量,存于RAM空间,写下标
EVENT_REP_INT_NUM2 :变量,存于RAM空间,读下标
EVENTREPORT_BUFF :RAM空间循环BUF的基地址
EVENTREPORT_BUFF_POINTER:指向RAM空间EVENTREPORT_BUFF内地址的一个指针变量
EVENT_REP_NUM1:变量,存于NVRAM空间0X600001地址处的一个变量,写下标
EVENT_REP_NUM2:变量,存于NVRAM空间0X600002地址处的一个变量,读下标
EVENT_REP_NUM:宏定义
EVENT_REP_LENGTH:宏定义
EVENTREPORT_GLOBAL:循环缓冲区的基地址0X600003
EVENT_REP_POINTER1:指向EVENTREPORT_GLOBAL地址空间的一个指针变量
1、产生报告,存入ram缓冲区,EVENT_REP_INT_NUM1写指针+1,并更新指针EVENTREPORT_BUFF_POINT指向下一个报告存储位置处.
2、产生新报告后,先判断EVENT_REP_INT_NUM1和EVENT_REP_INT_NUM2,读写下标不相等,说明有新报告产生,从读下标取新报告存入NVRAM,更新NVRAM区写指针EVENT_REP_NUM1,并更新读指针EVENT_REP_INT_NUM2+1。
3、通信时,先EVENT_REP_NUM2读下标处报告内容里面的新报告标志是否为0Xa6,如果是说明是新报告,则发送,如果不是,说明是重复报告,或者旧报告,则增加读指针,不发送,(或者通过判断读下标EVENT_REP_NUM2和写下标EVENT_REP_NUM1)。
总结:代码规范个人感觉很重要,不仅仅利于阅读,更是高可靠代码的基础。