CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

BIT_SET and V 3.249 problems

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
agrj



Joined: 26 Sep 2003
Posts: 48

View user's profile Send private message

BIT_SET and V 3.249 problems
PostPosted: Thu Mar 30, 2006 9:09 am     Reply with quote

Hi,

the BIT_SET function is not working in the compiler version 3.249. it was working fine
with the 3.236 version and when I update it, it stop to work.

do you have any solutions for it?

thanks
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Mar 30, 2006 9:25 am     Reply with quote

Works for me with int8. Can you be more specific?
Code:
#include <18F4525.h>
#use delay(clock=12000000)
#fuses HS,NOWDT,NOLVP,PROTECT,PUT,BROWNOUT
#use rs232(baud=19200,xmit=PIN_E0,INVERT,stream=DEBUG,DISABLE_INTS) // STDERR(same as DEBUG)
#case
#zero_ram

//======== MAIN =======//
void main(void)
{
  int8 x;
  setup_adc_ports(NO_ANALOGS);
  set_tris_a(0);set_tris_b(0);set_tris_c(0);set_tris_d(0);set_tris_e(0);
  fprintf(DEBUG,"\n\r");
  fprintf(DEBUG,"STARTING \n\r");
  x=0;
  fprintf(DEBUG,"%u\n\r",x);
  bit_set(x,0);
  fprintf(DEBUG,"%u\n\r",x);
  while (TRUE){
  }
}
agrj



Joined: 26 Sep 2003
Posts: 48

View user's profile Send private message

PostPosted: Thu Mar 30, 2006 9:49 am     Reply with quote

this is the routine.

Code:

      if (P_PB[c].total_cont >= CNT_db)         /* se o contador for maior que a definição de filtro, faça: */
      {
         P_PB[c].total_cont = CNT_db;         /* mantém o valor */
         if (P_PB[c].bit_a == FALSE)            /* se "P_PB[c].bit_a" for zero, faça: */
            BIT_CLEAR(Byte_validoB,c);         /* seta bit "c" de "Byte_validoB" */
         else                           /* se não, faça: */
            BIT_SET(Byte_validoB,c);         /* zera bit "c" de "Byte_validoB" */
      }



The variable Byte_ValidoB is int.

thanks
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Mar 30, 2006 11:03 am     Reply with quote

It is still working. Post a complete program. With only a few lines. Like I did.
One of the line should be a bit_set that shows it Not working.
agrj



Joined: 26 Sep 2003
Posts: 48

View user's profile Send private message

PostPosted: Thu Mar 30, 2006 12:22 pm     Reply with quote

It´s a part of a huge program (more than 20000 lines)!!

when the condition is TRUE, the correspondent BIT is never set. if I use the 3.236 version everything works fine.

I will try to create a little program with the same routine and see what happens.

thanks
Humberto



Joined: 08 Sep 2003
Posts: 1215
Location: Buenos Aires, La Reina del Plata

View user's profile Send private message

PostPosted: Thu Mar 30, 2006 2:51 pm     Reply with quote

Quote:

BIT_SET(Byte_validoB,c); /* zera bit "c" de "Byte_validoB" */


At least tell us how did you define the bit 'c'

Humberto
treitmey



Joined: 23 Jan 2004
Posts: 1094
Location: Appleton,WI USA

View user's profile Send private message Visit poster's website

PostPosted: Thu Mar 30, 2006 4:11 pm     Reply with quote

20000 lines. I'm glad I'm not you ; )
This program shows your code chunk. It works as I expect.
Byte_validoB is 1 then 3 then 7, that is bit0 is set then bit 1 then bit2.
I forced your code chunk into the else(bit_set) part.
Code:
#include <18F4525.h>
#use delay(clock=12000000)
#fuses HS,NOWDT,NOLVP,PROTECT,PUT,BROWNOUT
#use rs232(baud=19200,xmit=PIN_E0,INVERT,stream=DEBUG,DISABLE_INTS) // STDERR(same as DEBUG)
#case
#zero_ram

//======================= MAIN ============================//
void main(void){
  struct  jnk_def{
  int8 total_cont;
  int8 bit_a:1; //one bit TRUE or FALSE
  int8 bit_b:7; //the rest of the byte waisted
  }P_PB[3];

  int8 Byte_validoB,c,CNT_db;

  setup_adc_ports(NO_ANALOGS);
  set_tris_a(0);set_tris_b(0);set_tris_c(0);set_tris_d(0);set_tris_e(0);
  fprintf(DEBUG,"\n\r");
  fprintf(DEBUG,"STARTING\n\r");
  P_PB[0].total_cont=0;  //set all to zero
  P_PB[1].total_cont=0;
  P_PB[2].total_cont=0;
  P_PB[0].bit_a=0;
  P_PB[1].bit_a=0;
  P_PB[2].bit_a=0;
  Byte_validoB=0;
  c=0;

for(c=0;c<3;c++){
  fprintf(DEBUG,"Byte_validoB=%u c=%u->",Byte_validoB,c);

  P_PB[c].total_cont=4;CNT_db=3;  //4>3 to get into if statement

  if (P_PB[c].total_cont >= CNT_db){
    //P_PB[c].total_cont = CNT_db;

    P_PB[c].bit_a = TRUE; //set to true to get else statment
    if (P_PB[c].bit_a == FALSE){
      //bit_clear(Byte_validoB,c);
    }
    else{
      bit_set(Byte_validoB,c); //set bit 4 of Byte_validoB
      fprintf(DEBUG,".");//to let me know that i did bit_set
    }
  }
  fprintf(DEBUG,"Byte_validoB=%u\n\r",Byte_validoB);
}
  while (TRUE){
  }
}
I'm giving up. Your not giving me any info to solve your problem.
agrj



Joined: 26 Sep 2003
Posts: 48

View user's profile Send private message

PostPosted: Fri Mar 31, 2006 6:47 am     Reply with quote

Sorry,

I will try to give you as much information as I can. but I don't know why it is not working here.

the 'c' value is an int and it is incremented like c++.

even though, thanks a lot for your help.
Humberto



Joined: 08 Sep 2003
Posts: 1215
Location: Buenos Aires, La Reina del Plata

View user's profile Send private message

PostPosted: Fri Mar 31, 2006 11:50 am     Reply with quote

Quote:

the 'c' value is an int and it is incremented like c++.


You defined
int8 Byte_validoB
so bit 'c' can´t be bigger than 7

while if you define:
int32 Byte_validoB
bit 'c' can be as big as 31

In CCS an int is 8 bit wide.


Humberto
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group