|
|
View previous topic :: View next topic |
Author |
Message |
Marco_Arg Guest
|
CCS RTOS problem please help me |
Posted: Thu Oct 04, 2007 2:07 pm |
|
|
I have the following problem, I am trying to use RTOS to receive characters via software uart and it works fine, simultaneously I use a simple task to toggle a LED every 0.5 seconds, there is where I have a problem. When I set the LED task RATE higher than 30ms the LED task works erratically, but if I set the RATE to 30 ms it works perfectly, of course the led toggle too fast.
What I am doing wrong?
Thanks
Here is the code: I am using CCS V4
#include <18F452.h>
#fuses H4,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=40000000)
#use RS232(baud=38400,xmit=PIN_C1,rcv=PIN_C2,bits=8,parity=N,stream=debug,errors)
#use rtos(timer=0, minor_cycle=250us )
#define LED pin_c4
// Variables
#zero_ram
int8 buffer_232[20];
#task (rate=250us) // check for incoming bytes and when buffer reachs 8, send them to PC
void get_rs232(void){
static int8 rcvd=0;
while (!kbhit(debug))
rtos_yield();
buffer_232[rcvd]=getc(debug);
rcvd++;
if (rcvd >=8){
fprintf(debug,"%s",buffer_232);
rcvd=0;
}
}
#task (rate=500ms) // every 0.5 sec toggle LED
void toogle_led(void){
static int1 aux=0;
aux=!aux;
if (aux==1)
output_high(led);
else
output_low(led);
}
void main(void){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
disable_interrupts(GLOBAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0 (RTCC_DIV_2|RTCC_INTERNAL|RTCC_8_BIT);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_tris_a ( 0b00001000 );
set_tris_b ( 0b11111111 ); //All Inputs
set_tris_c ( 0b10000010 ); //All Outputs
set_tris_d ( 0b00000000 ); //All Outputs
set_tris_e ( 0b00000111 ); //All Inputs
output_high(LED);
rtos_run(); // Run RTOS Tasks
} |
|
|
Guest
|
|
Posted: Thu Oct 04, 2007 6:08 pm |
|
|
I have the following problem, I am trying to use RTOS to receive
characters via software uart and it works fine, simultaneously I use a
simple task to toggle a LED every 0.5 seconds, there is where I have a
problem. When I set the LED task RATE higher than 30ms the LED task
works erratically, but if I set the RATE to 30 ms it works perfectly, of
course the led toggle too fast.
What I am doing wrong?
Thanks
PD: sorry I didnt know how to post code now it is corrected.
I contiue testing the code and when I change #USE RTOS minor_cycle
value to something really small like 10us or less, all the task RATES must
be no higher than 2 ms or else the code will fail, I dunno why.
Code: |
#include <18F452.h>
#fuses H4,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=40000000)
#use RS232(baud=38400,xmit=PIN_C6,rcv=PIN_C7,bits=8,parity=N,stream=debug,errors)
#use rtos(timer=0, minor_cycle=250us )
#define LED pin_c4
// Variables
#zero_ram
int8 buffer_232[20];
#task (rate=250us) // check for incoming bytes and when buffer reachs 8, send them to PC
void get_rs232(void){
static int8 rcvd=0;
while (!kbhit(debug))
rtos_yield();
buffer_232[rcvd]=getc(debug);
rcvd++;
if (rcvd >=8){
fprintf(debug,"%s",buffer_232);
rcvd=0;
}
}
#task (rate=500ms) // every 0.5 sec toggle LED
void toogle_led(void){
static int1 aux=0;
aux=!aux;
if (aux==1)
output_high(led);
else
output_low(led);
}
void main(void){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
disable_interrupts(GLOBAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0 (RTCC_DIV_2|RTCC_INTERNAL|RTCC_8_BIT);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_tris_a ( 0b00001000 );
set_tris_b ( 0b11111111 ); //All Inputs
set_tris_c ( 0b10000010 ); //All Outputs
set_tris_d ( 0b00000000 ); //All Outputs
set_tris_e ( 0b00000111 ); //All Inputs
output_high(LED);
rtos_run(); // Run RTOS Tasks
}
|
|
|
|
bwhiten
Joined: 26 Nov 2003 Posts: 151 Location: Grayson, GA
|
|
Posted: Thu Oct 04, 2007 7:49 pm |
|
|
I believe your settings for Timer0 may not allow for a 500ms time out at your clock setting of 40MHz. |
|
|
|
|
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
|