Vous êtes sur la page 1sur 3

#include "StdAfx.

h"
#include "interrupt.h"
#include <ctime>
#define Out(x) printf (#x" = #x la %d ms \n",x,clock())
#define Display(x) printf (#x" = &d\n,x)
int calcul_CRC(int nr)
{
int pos_MSB=0;
int i;
while(nr>7)
{
for(i=0;i<32;i++)
{
if(((nr>>i)&1)==1)
{
pos_MSB=i;
}
}
nr^=(0xB<<(pos_MSB-3));
}
return nr;
}
char calcul_paritate(int nr)
{
int i;
char paritate = 0;
for(i=0;i<32;i++)
{
paritate^=((nr>>i)&1);
}
return paritate;
}
/*msg struct*/
typedef struct
{
unsigned char ID:7;
unsigned int message:32;
unsigned int time:21;
unsigned char crc:3;
unsigned char parity:1;
}msg;
struct{
int cnt;
msg buffer[7];
}double_buffer[2];
char index_buffer = 0;
int mesaj = 2016;
void task_100ms()
{
printf("Task_100ms la %d\n,clock());
double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].ID =
double_buffer[index_buffer].cnt;
double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].message =
mesaj++;
double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].time = clock();
double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].crc =
calcul_CRC(double_buffer[index_bufer].buffer[double_buffer[index_buffer].cnt].messa
ge);
double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].parity=
calcul_paritate(double_buffer[inde_buffer].buffer[double_buffer[index_buffer].cnt].
message);
Display(double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].ID);
Display(double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].message
);
Display(double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].time);
Display(double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].crc);
Display(double_buffer[index_buffer].buffer[double_buffer[index_buffer].cnt].parity)
;
double_buffer[inde_buffer].cnt++;
}
void task_500ms(){
printf(Task_500ms la %d\n,clock());
char old_index = inde_buffer;
index_buffer^=1;
int i;
int xor = 0;
for(i=0;i<double_buffer[old_index].cnt;i++)
{
Display(double_buffer[old_index].buffer[i].ID);
Display(double_buffer[old_index].buffer[i].message);
Display(double_buffer[old_index].buffer[i].time);
Display(double_buffer[old_index].buffer[i].crc);
Display(double_buffer[old_index].buffer[i].parity);
if(calcul_CRC(double_buffer[old_index].buffer[i].message)==
double_buffer[old_index].buffer[i].crc)
{
printf("CRC mesaj OK\n";
}
else
{
printf("CRC mesa NOK\n);
}
if(calcul_paritate(double_buffer[old_index].buffer[i].message)
==double_buffer[old_index].buffer[i].parity
{
printf("paritate mesaj OK n");
}
else
{
printf("paritate mesaj NOK\n);
}
xor^=double_buffer[old_index].buffer[i].message;
}
double_buffer[old_index].cnt = 0;
Display(xor);
}
Struct t {
int wait time;
int period;
int lock;
int set_start;
Void(*fct)(void);
}
task[]={{3,5,0,0,task_100ms},{17,25,0,0,task_500ms}};
void tick(void)
{
/*10ms tick function called from the interrupt*/
int i;
char nr_el;
nr_el = sizeof(task)/sizeof(struct t);
for(i=0;i<nr_el;i++)
{
if(task[i].wait_time>1)
{
task[i].wait_time--;
}
else
{
task[i].set_start = 1;
task[i].wait_time = task[i].period;
}
}
for(i=0;i<nr_el;i++)
{
if(task[i].lock)
{
break;
}
if(task[i].set_start)
{
task[i].set_start = 0;
task[i].lock = 1;
task[i].fct();
task[i].lock = 0;
}
}

Vous aimerez peut-être aussi