Signalhantering?
Postat: 3 mars 2009, 15:14:24
Jag sitter och funderar lite på hur man på ett bra och enkelt sätt gör en signalhanterare till en microcontroller (18F4550 och dsPIC33fj256GP506) som ska skrivas i C. Med bra och enkelt så menar jag att det inte ska ta allt för mycket programminne och ramminne samt intuitivt hur man ska använda det. (Ingen begränsning i hur komplex själva koden är som hanterar signalerna).
Det jag skulle vilja göra är ett enkelt gränssnitt som en subrutin (eller tråd) lätt kan använda, typ sendData(buffer, size) och " ReadData(buffer, &size) eller liknande.
Kruxet i det hela är att flera trådar eller subrutiner ska kunna skicka och ta emot data och be om svar från en annan microcontroller men inte se varandras svar. Tanken är att de ska dela samma uart el CAN modul.
Ett exempel i pseudokod / C-kod för att visa principen jag är ute efter:
funktion1
{
int size = 0;
char buff[100];
static char mode =0;
switch(mode)
{
case 0:
send (mottagare1, "jag vill veta temperatur", 25);
mode = 1;
break;
case 1:
read(buff,&size)
if(size != 0)
{
mode = 3;
printf(buffer);
}
break;
default:
mode = 0;
}
funktion2
{
int size = 0;
char buff[100];
static char mode =0;
switch(mode)
{
case 0:
send (mottagare2, "vad är klockan?", 17);
mode = 1;
break;
case 1:
read(buff,&size)
if(size != 0)
{
mode = 3;
printf(buffer);
}
break;
default:
mode = 0;
}
while(1)
{
funktion1();
funktion2();
}
det jag undar över är:
har någon sett en bra princip för att lösa detta problem? finns det färdig kod nånstans som man skulle kunna ta inspiration från? Jag har 2 egna förslag på lösningar men är lite nyfiken på hur ni andra tänker eller skulle lösa detta problem.
Det jag skulle vilja göra är ett enkelt gränssnitt som en subrutin (eller tråd) lätt kan använda, typ sendData(buffer, size) och " ReadData(buffer, &size) eller liknande.
Kruxet i det hela är att flera trådar eller subrutiner ska kunna skicka och ta emot data och be om svar från en annan microcontroller men inte se varandras svar. Tanken är att de ska dela samma uart el CAN modul.
Ett exempel i pseudokod / C-kod för att visa principen jag är ute efter:
funktion1
{
int size = 0;
char buff[100];
static char mode =0;
switch(mode)
{
case 0:
send (mottagare1, "jag vill veta temperatur", 25);
mode = 1;
break;
case 1:
read(buff,&size)
if(size != 0)
{
mode = 3;
printf(buffer);
}
break;
default:
mode = 0;
}
funktion2
{
int size = 0;
char buff[100];
static char mode =0;
switch(mode)
{
case 0:
send (mottagare2, "vad är klockan?", 17);
mode = 1;
break;
case 1:
read(buff,&size)
if(size != 0)
{
mode = 3;
printf(buffer);
}
break;
default:
mode = 0;
}
while(1)
{
funktion1();
funktion2();
}
det jag undar över är:
har någon sett en bra princip för att lösa detta problem? finns det färdig kod nånstans som man skulle kunna ta inspiration från? Jag har 2 egna förslag på lösningar men är lite nyfiken på hur ni andra tänker eller skulle lösa detta problem.