ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
30 июня
339701 Топик полностью
Юрий_СВ (09.07.2012 05:13, просмотров: 258) ответил Лeoнид Ивaнoвич на Да не будет короче, даже если применить извраты. Хотя на оверхед в последнее время иду осознанно, это меньшее зло по сравнению с глюкавой программой.
Возможно, на примере будет нагляднее >> Пример из жизни. (использую на Мега64) Есть 4 канала АЦП. В разных режимах для каждого канала используются разные функции. (названия функций изменены) PROGMEM FN_PTR dsp_fn_tab[MODE_AM][CH_AM] = { // CH_A CH_B CH_C CH_D { fn_a1, fn_b1, fn_c1, fn_d1 }, // MODE_1 { fn_a1, fn_b1, fn_c1, fn_d1 }, // MODE_2 { fn_a1, fn_b1, fn_c1, fn_d1 }, // MODE_3 { fn_a1, fn_b1, fn_c1, fn_d1 }, // MODE_4 { fn_a1, fn_b1, fn_c1, fn_d1 }, // MODE_5 { fn_a1, fn_b1, fn_c1, fn_d1 } // MODE_6 }; do { fn func; func=(fn)pgm_read_ptr(&dsp_fn_tab[mode][ch_num]); if (func) func(); } while(0); Утверждаю, что этот способ : - даёт наименьшие затраты процессорного времени (*) - даёт одинаковые затраты процессорного времени для любого варианта - имеет самый короткий код - наилучший в читабельности и отладке (т.е. по "неглюкавости") - изменяется проще некуда * - за исключением первых 2-4 пунктов из 24(!) ===================================================== О меню. Для себя ограничился 8-мю уровнями по 16 пунктов. Мне хватает. (уровней на 5 и до пунктов 12 использую точно) Один раз отладка примитивов. Дальше - одно удовольствие. (вбросить пункт, н-р, просто для отладки - минута дела) Пункт всегда имеет одинаковый формат. Добавит/убрать - раз плюнуть. // Подсказка Название Указатель Параметр Свойства {volume_h02, volume_c02, recalc_volume, C8_VOL_KEY, MIP_C8_FS0}, // Даже представить такое со switch - жутковато : - по размеру кода - по читабельности - по трудозатратам на изменения А теперь представим, что прибор имет несколько модификаций (отличия в меню)... У меня их несколько.