t90
Joined: 07 Aug 2008 Posts: 11 Location: saigon,vietnam
|
my list not work |
Posted: Sun Dec 07, 2008 10:12 am |
|
|
I'm working with 18f4550. I implement the static_list via array 20 element that every element is a struct. Main method in my list is insert(); In this function I invoke 2 function bcopy() (I tested this function and this work well) and memcmp() (exist in CCS PIC C). But when I test values in this array, the values are not the values I had inserted in the array. Someone give me some solution.
Code: |
#include "18f4550.h"
#device HIGH_INTS=TRUE
#use delay(clock=20000000)
#fuses HS,NOPROTECT,NOLVP,NODEBUG,NOWDT
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7)
#include "ewl_glcd.c"
#include "ewl_realtime.c"
char glcd_buff[128];
char xuat1[6];
char xuat2[6];
char xuat3[6];
char xuat4[6];
struct Node{
int time[4];
};/**/
struct Node tim[20];
static int num;
static int header;
static int tailer;
static int index;
static BYTE temp[4];
void bcopy(int *a, int *b) // This function requires 2 pointers
{
int i;
for (i = 0; i < 4; i++)
{
*b++ = *a++; // or *b++ = *a++; should work as well
}
}
//them vao 1 phan tu
int insert(int8 rtb[4]){
int temp1[4];
int temp2[4];
int temp3;
int count;
int1 flag;
count=0;
flag=1;
index=header;
if(num==20)//is ovrload?
return 0;//overflow
if(num==0){//overlow
//strcpy(tim[index].time,timt);
bcopy(rtb,tim[index].time);
tailer=index;
num=1;//increase number of element
return 1;//suc
}
//less than header
if(memcmp(tim[index].time,rtb,4)>0){
if(index==0){
index=19;
}else
index--;
bcopy(rtb,tim[index].time);
num++;
header=index;
return 1;
}
while(flag){//find the location of the element that greater than rtb
if(memcmp(tim[index].time,rtb,4)==0)//if equal
return 2;//the array has this value,return
else if(memcmp(tim[index].time,rtb,4)<0){//if less than
count++;//count is increased
if(count>num){//counter greater than the max number of element in this array
bcopy(rtb,tim[index].time);
tailer=index;
num++;
return 1;
}
if(index==19)//simulate the cyclic buffer
index=0;//index goback 0 when index reach the max index of array(19)
else
index++;
}
else
flag=0;
}
count=num-count;
bcopy(rtb,temp1);
for(count;count>0;count--){//change values of element form index to tailer
tailer=index;
bcopy(tim[index].time,temp2);
bcopy(temp1,tim[index].time);
bcopy(temp1,temp2);
if(index==19)
index=0;
else
index++;
}
num++;
return 1;
}
void main()
{
int a1[4];
int a2[4];
int a3[4];
int a4[4];
int a5[4];
int a6[4];
int receive1;
int receive2;
int receive3;
int cp1;
int cp2;
int cp3;
num=0;
header=0;
tailer=0;
temp[0]=0xFF;
temp[1]=0xFF;
temp[2]=0xFF;
temp[3]=0xFF;
a1[0]=0x00;
a1[1]=0x00;
a1[2]=0x00;
a1[3]=0x00;
a2[0]=0x01;
a2[1]=0x01;
a2[2]=0x01;
a2[3]=0x01;
a3[0]=0x02;
a3[1]=0x02;
a3[2]=0x02;
a3[3]=0x02;
a4[0]=0x03;
a4[1]=0x03;
a4[2]=0x03;
a4[3]=0x03;
receive1=insert(a1);
receive2=insert(a2);
receive3=insert(a3);
receive=insert(a3);
set_time();
set_tris_e(0x00);
set_tris_d(0x00);
set_tris_b(0xfc);
set_tris_c(0b10000000);
set_tris_a(0x00);
///////////////
glcd_init(ON);
glcd_fillScreen(OFF);
//glcd_text57_Vn(0,0,text,1,1);
//set up LCD
set_tris_c(get_tris_c()&0b11111011);
init_DS1307();
sprintf(xuat1,"%u-%u-%u-%u\n",tim[3].time[0],tim[3].time[1],tim[3].time[2],tim[3].time[3]);
sprintf(xuat3,"%u-%u-%u-%u\n",tim[4].time[0],tim[4].time[1],tim[4].time[2],tim[4].time[3]);
sprintf(xuat4,"%u-%u-%u-%u\n",tim[5].time[0],tim[5].time[1],tim[5].time[2],tim[5].time[3]);
while(1){
glcd_text57(20,20,xuat1,1,ON);//display element of the list
glcd_text57(20,30,xuat3,1,ON);
glcd_text57(20,40,xuat4,1,ON);
}
} |
|
|