ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
68765
GM (13.09.2006 22:01, просмотров: 7886)
To jaga-jaga. Вот с-код формирования рабочей таблицы. 
char number=24;                   //число каналов шим
char time[24],channel[24];        //таблица уставок
char pwmtable[4,24];              //рабочая таблица
char pattern[3,24]=
                   {
                    0b00000001,0b00000000,0b00000000,
                    0b00000010,0b00000000,0b00000000,
                    0b00000100,0b00000000,0b00000000,
                    0b00001000,0b00000000,0b00000000,
                    0b00010000,0b00000000,0b00000000,
                    0b00100000,0b00000000,0b00000000,
                    0b01000000,0b00000000,0b00000000,
                    0b10000000,0b00000001,0b00000000,
                    0b00000000,0b00000010,0b00000001,
                    0b00000000,0b00000100,0b00000000,
                    0b00000000,0b00001000,0b00000000,
                    0b00000000,0b00010000,0b00000000,
                    0b00000000,0b00100000,0b00000000,
                    0b00000000,0b01000000,0b00000000,
                    0b00000000,0b10000000,0b00000000,
                    0b00000000,0b00000000,0b00000001,
                    0b00000000,0b00000000,0b00000010,
                    0b00000000,0b00000000,0b00000100,
                    0b00000000,0b00000000,0b00001000,
                    0b00000000,0b00000000,0b00010000,
                    0b00000000,0b00000000,0b00100000,
                    0b00000000,0b00000000,0b01000000,
                    0b00000000,0b00000000,0b10000000
                   }

//Упорядочение входных уставок по времени
for(i=0;i<number;i++)
{
 k=i;
 for(j=i+1;j<number;j++)
 {
  if(time[i]>time[j] k=j;
 }
 if(k!=i)
 {
  a=time[i];
  time[i]=time[j];
  time[j]=a;
  a=channel[i];
  channel[i]=channel[j];
  channel[j]=a;
 }
}

//Формирование рабочей таблицы очередного шим
pwmtable[0,0]=time[0];
pwmtable[1,0]=pattern[1,channel[0]];
pwmtable[2,0]=pattern[2,channel[0]];
pwmtable[3,0]=pattern[3,channel[0]];
k=0;
for(i=0;i<number;i++)
{
 if(pwmtable[0,k]=time[i])
 {
  pwmtable[0,k]=time[i];
  pwmtable[1,k]|=pattern[1,channel[i];
  pwmtable[2,k]|=pattern[2,channel[i];
  pwmtable[3,k]|=pattern[3,channel[i];
 }
 else
 {
  pwmtable[0,k+1]=time[i];
  pwmtable[1,k+1]=pwmtable[1,k]|pattern[1,channel[i];
  pwmtable[2,k+1]=pwmtable[2,k]|pattern[2,channel[i];
  pwmtable[3,k+1]=pwmtable[3,k]|pattern[3,channel[i];
  k++;
 }
}

Для входных уставок
time[24]=   {50,51,52,53,100,100,100,100,100,..};
channel[24]={ 0, 2, 3, 6,  7,  1,  4,  5,  8,..};

должна быть получена следующая рабочая таблица
x  [0,x]   [1,x]    [2,x]    [3,x]   
0    50   00000001 00000000 000000000
1    51   00000101 00000000 000000000
2    52   00001101 00000000 000000000
3    53   01001101 00000000 000000000
4   100   11111101 11111111 111111111
Давайте посмотрим на ваш код. Хотелось бы всё же завершить сравнение по быстродействию кода формирования шим на пик и авр.