Понял, теперь делаем разную разбивку по оборотам для рабочей карты и карты холостого хода:
PGM_DECLARE(int16_t f_slots_ranges[16]) = {852,987,1120,1400,1590,1850,2070,2360,2800,3100,3528,4092,4535,5000,5583,6345};
PGM_DECLARE(int16_t f_slots_length[15]) = {135,133, 280, 190, 260, 220, 290, 440, 300, 428, 564, 443, 465, 583,762};
//данные массивы констант задают сетку по оси оборотов, для карты ХХ.
PGM_DECLARE(int16_t f_slots_ranges_idle[16]) = {300,700,735,770,800,840,950,1180,1500,1800,2400,3200,4100,4500,5000,6345};
PGM_DECLARE(int16_t f_slots_length_idle[15]) = {400, 35, 35, 30, 40,110,230, 320, 300, 600, 800, 900, 400, 500,1345};
ну и в функциях:
int16_t idling_function(struct ecudata_t* d)
{
int8_t i;
int16_t rpm = d->sens.inst_frq;
//находим узлы интерполяции, вводим ограничение если обороты выходят за пределы
for(i = 14; i >= 0; i--)
if (d->sens.inst_frq >= PGM_GET_WORD(&f_slots_ranges_idle
)) break;
if (i < 0) {i = 0; rpm = f_slots_ranges_idle[0];}
return simple_interpolation(rpm,
_GB(&d->fn_dat->f_idl), _GB(&d->fn_dat->f_idl[i+1]),
PGM_GET_WORD(&f_slots_ranges_idle), PGM_GET_WORD(&f_slots_length_idle));
}
и
//находим узлы интерполяции, вводим ограничение если обороты выходят за пределы
for(f = 14; f >= 0; f--)
if (rpm >= PGM_GET_WORD(&f_slots_ranges[f])) break;
//рабочая карта работает на 854-х оборотах и выше
if (f < 0) {f = 0; rpm = f_slots_ranges[0];}
fp1 = f + 1;
return bilinear_interpolation(rpm, discharge,
_GB(&d->fn_dat->f_wrk[l][f]),
_GB(&d->fn_dat->f_wrk[lp1][f]),
_GB(&d->fn_dat->f_wrk[lp1][fp1]),
_GB(&d->fn_dat->f_wrk[l][fp1]),
PGM_GET_WORD(&f_slots_ranges[f]),
(gradient * l),
PGM_GET_WORD(&f_slots_length[f]),
gradient);
а вот с менеджером проблемма - установил боланд компилятор, установил сМаке - но СМаке компилятор не видет - перекомпилировать немогу и если для АВР среду настроить - более менее понятно как, то для Боланда - тяжко - где копать?
Понял надо одновременно и студия и боланд и сМаке. Пересобрал поменяв рад в файле. но при запуске все осталось как было