Página 1 de 1

uRTOS simplex

MensagemEnviado: 09 Mai 2010 22:33
por CCandido
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;
}
//---------------------------------------------------------

MensagemEnviado: 01 Jun 2010 13:22
por CCandido
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,