We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I'm using the cygnal F124 chip. now my program is 33K in size and my ram memory isa bout 7.2K. I use the uart0 to print some information and one LCD, last week my unsigned long variable changed without writting in them.. I use this variables as counters these counters are updated every one second but after 3 o4 seconds this variables change from 200 to 156234324 or another big number!!!!! I want to know what is the problem here.. these variables are globla! and I only updated by 2 or 3 functions Another thing is can someone tell me how to optimize the code using the keil compiler. I want to know which pragma function should I have to use to get better performance and dont have this kind of errors
HERE IS MY FUNCTION This function call to get_xpacket function which updated the counters, and the view_falg variable is updated by interrupt every 2 seconds. this function print in a LCD the counters, when I run the program.. it runs fine after 2 minutes the counters are strange! the lcd print strange values. maybe something is overwritting them but How can I know it because they work fine for a moment and then I stop the program and the values are very rare. I attach my interrupt isr using the pca too. void tester() { unsigned char idata a,st1,conter,sfin,i; //unsigned int pp; conter=0; sfin=1; errores=0; colls=0; MII_ERROR=0; PHY=0; MPA=0; CR1=0; FAE=0; FO=0; RP=0; okpak=0; length1=0; length2=0; length3=0; length4=0; viewflag=0; xcount=0; xpaquetes=0; xbytes=0; xcount2=100; key_opt=10; cls(); SFRPAGE = UART0_PAGE; printf("%c[s",esc); SFRPAGE = CONFIG_PAGE; get_xpacket(); detectar_tecla(); if (uart_buf == 0x1B) { sfin=0; uart_buf=0; } if (key_opt==10 && viewflag==1) { sprintf(lcd_line1,"Num.Paquetes: %6ld",xpaquetes); sprintf(lcd_line2,"Num.Bytes : %6ld",xbytes); sprintf(lcd_line3,"Paquetes OK : %6ld",okpak); sprintf(lcd_line4,"Errores : %6ld",errores); line1; for (i=0;i<20;++i) lcd_send_byte(1,lcd_line1[i]); line2; for (i=0;i<20;++i) lcd_send_byte(1,lcd_line2[i]); line3; for (i=0;i<20;++i) lcd_send_byte(1,lcd_line3[i]); line4; for (i=0;i<20;++i) lcd_send_byte(1,lcd_line4[i]); viewflag=0; //lcd_pantalla } void PCA0_ISR (void) interrupt 9 { PCA0L = 0x00; PCA0H = 0x00; if (CCF0) { CCF0=0; } xcount=xcount+1; if (xcount>=xcount2) { xcount=0; viewflag=1; } }