ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
444051 Топик полностью
SciFi (19.09.2013 12:45 - 12:55, просмотров: 81) ответил Mazur на Меня пока это устраивает:
Оформлено уже достаточно симпатично. Остались претензии по логической структуре: - на мой взгляд, излишне сложно - отдельные куски выглядят так, будто они там просто чтобы попробовать, а не обусловлены задачей, которую они должны решать. То есть проектирование не сверху вниз, а наоборот. - привязка к вашему любимому таймеру я бы оспорил - как оспорил бы и склонность везде вставлять конечный автомат, но это дело личного вкуса, видимо А что касается привязки кнопок к портам, я делаю вот так (обращаю внимание, что макросы тут уже не нужны, так как список кнопок уже сведён в удобную таблицу с указанием портов): struct key_port { uint8_t volatile* reg; uint8_t mask; }; enum key_code { KEY_NONE, KEY_A, KEY_B }; struct key_bind { enum key_code code; struct key_port port; }; /* use __flash keyword for AVR */ static const __flash struct key_bind keys[] = { { KEY_A, { &PORT_A, 1 << 0 } }, { KEY_B, { &PORT_B, 1 << 2 } }, }; static void keys_scan(void) { int i; for (i = 0; i < sizeof(keys) / sizeof(keys[0]); i++) { if ((*keys[i].port.reg & keys[i].port.mask) == 0) { /* key is pressed */ } else { /* key is not pressed */ } } }
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้