uRTOS simplex

Software e Hardware para uC da Qualcomm, NXP, FreeScale e Motorola

Moderadores: 51, guest2003

uRTOS simplex

Mensagempor CCandido » 09 Mai 2010 22:33

para rodar duas funçoes no mcu.
simples exemplo, usei um SH32, mas, pode ser qquer outro.

void TI1_Init(void);
void init_dualtask(void);
void _task_main(void);
void f1(void);
void f2(void);
uint straks_0 @0x000000FE;
uint temp_stk,tsk0,tsk1;
uchar cr_tasks,z,y;
//------------------------------
void main(void) {




init_dualtask();
EnableInterrupts;

TI1_Init();





for(;;) {
z++;
}
}

}
//-------------------------------------------------------
void _task_main(void){

for(;;) {
y++;
}

}
//-------------------------------------
void interrupt 13 isr_TPM2C1SC_CH1F(void) //timer = 10uS,20uS....
{
TPM2C1SC_CH1F =0;
asm{

TSX
STHX temp_stk; // pilha atual salva
}

cr_tasks ^=0x1;


if( 0x01 & cr_tasks){ // 1= _task_main ,0 = main


asm{ // carrega _task_main

LDHX tsk1; // load pilha anterior
TXS
LDHX temp_stk;
STHX tsk0; // salva atual

}

}else{


asm{ // carrega main

LDHX tsk0; // load pilha anterior
TXS
LDHX temp_stk;
STHX tsk1; // salva atual

}

}

}
//-------------------------------------------------------
void init_dualtask( void ){

void (*p) ();

asm{ // so para sumulador...
lda #$10
ldhx #$FF

cl: clr ,x
aix #-1
deca
bne cl
}

p = _task_main; // salva endereço da funçao2
straks_0 = (int) (*p);
cr_tasks= 0;
tsk1 = 0xFA; // Topo da pilha2 FF-5

asm{
TSX // salva pilha main
AIX #-9
STHX tsk0;
}

}
//---------------------------------------------------------
void TI1_Init(void) {

SOPT1 = 0x23;
SOPT2 = 0x3;

TPM2SC= 0x00;
TPM2C1SC= 0x50;
TPM2MOD = 0xEF;
TPM2CNTH= 0x00;
TPM2SC = 0x08;
}
//---------------------------------------------------------
" So aquilo que somos verdadeiramente,pode nos Curar "
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR

Mensagempor CCandido » 01 Jun 2010 13:22

Pessoal, se alguem quizer comentar ou melhorar fique a vontade.
foi feito bem simples pra ficar facil de entender.
esta com duas threard,mas pode fazer varias.
outra coisa, uma funçao pode pedir prioridades de tempo caso precise ou
caso nao estaja sendo usada ele pde se desligar.
um exemplo:
LCD,TECLADO,SERIAL,I/O. funcionar cada um em separado.

Obrigado,
" So aquilo que somos verdadeiramente,pode nos Curar "
CCandido
Byte
 
Mensagens: 120
Registrado em: 12 Out 2006 12:54
Localização: Londrina-PR


Voltar para NXP (ex-FreeScale (ex-Motorola))

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x