Различные вопросы:
void debounceSwitch(volatile uint8_t* port, uint8_t pin)
. Указатели на аппаратные регистры всегда должны быть volatile
. Не имеет смысла что-либо возвращать. 1
литералы со знаком int
при сдвиге битов. Должно быть 1u << n
, иначе ваша программа выдаст ошибку, если n
больше 8. Есть много способов отменить кнопки. Простейшая профессиональная форма, вероятно, состоит в том, чтобы иметь периодический таймер, работающий с прерыванием каждые 10 мс (этого должно быть достаточно, если сомневаетесь, измерьте шипы отклонения вашей кнопки с областью действия). Это будет выглядеть примерно так: псевдокод:
volatile bool button_pressed = false;
void timer_interrupt (void)
{
uint8_t button = port & mask;
button_pressed = button && prev;
prev = button;
}
Это при условии, что кнопки используют активную высокую логику.
Вы правы в том, что детализированный элемент управления, который вы ищете, невозможен и требует кода. Объекты источников данных ASP.NET - не что иное, как головная боль в **. Вы обнаружите, что, используя их, вы будете сталкиваться с подобными ситуациями снова и снова.
Вот некоторые из проблем, которые вы обнаружите:
Я взял на себя весь доступ к данным в коде позади и не оглядывался назад.
Да. Если вам нужен такой контроль над тем, когда происходит привязка данных, вам нужно сделать это в коде.
Я также боролся с этой автоматической привязкой и решил опубликовать свое решение здесь:
Мне потребовалось время, чтобы понять это выходит, но сейчас все работает нормально.
Контекст
Я использую ObjectDatasource, потому что он автоматически обрабатывает все пейджинг и сортировку Gridview. Я использую уровень данных с Linq2SQL и использую его методы Skip () и Take () для загрузки только объема данных, необходимого для заполнения одной страницы GridView.
Использование SelectMethod и SelectCountMethod ObjectDataSource