Вот накатал предварительный вариант формирования рабочей таблицы Сильно не бейте, написал за 15 минут и колотил 10(:-), так что мог чёнить существенное упустить.
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]) k++;
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];
}
Для входных уставок
time[24]= {50,51,52,53,100,100,100,100,100,..};
channel[24]={ 0, 2, 3, 6, 7, 1, 4, 5, 8,..};
должна быть получена следующая рабочая таблица pwmtable
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
Было бы интересно узнать сколько тактов требуется на сях.