ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1227291 Топик полностью
Dingo (29.07.2022 12:13 - 12:34, просмотров: 476) ответил Dingo на Два вопроса за раз хочу спросить, смежные в каком-то смысле: 1) есть литература или цикл статей может, по которым можно навести порядок в голове и/или научиться проектировать программы? Что-то по методологии. 2) какие ОСи умеют в прерывании дёрнуть планировщик? Появились новые данные для задачи, надо быстро отдать ей управление, а не ждать хх миллисекунд до дежурного переключения. Скорей всего на такие вещи задача "подписывается", семафор взводит или ещё как-то обозначает
Возвращаясь к 1) проектирование программ - пример: есть реализованный мной счёт времени подобный ntp под STM32F407 на SysTick, с хранением целой и дробной части секунд, на него повешан протокол синхронизации, который подстраивается приемлемой для применения точностью. 

Как уже сделано - ниже.

ntptime_t __attribute__((weak)) ntp_getFineTime(void)

{
	uint32_t  val  = SysTick->VAL;
	uint32_t  load = SysTick->LOAD;
	ntptime_t ntp  = SystemTime;

 ntptime_t retval = { 0, 0 };
 uint64_t prFrac;
        // Calculate ntptime from catched
	prFrac  = load - val;
	prFrac *= SYSTICK_STEP;
	prFrac  = prFrac / (load+1);
	retval.fraction = (uint32_t)prFrac;
	retval = ntp_add( retval, ntp);
	return(retval);
}

Теперь надо то же реализовать для нувотона. Выяснилось на разности реализаций, что те моменты, которые я относил к ntp на деле относятся к таймерам, которые - сюрприз! - имеют разный функционал. Если уточнить вопрос - на основе каких критериев выделяется слой абстракции? Как определить интерфейс, необходимый для реализации? В данном конкретном случае установить_время(), ускорить счёт(), замедлить_счёт(). Опять же - изменение скорости счёта с каким аргументом должно быть - доля от текущей или какой-то другой?

У кого какие соображения или практика есть, которыми допустимо поделиться?

Был совет смотреть как реализую подобные штуки другие, и вот как запрос сформулировать? Тот же ntp implementation выводит ссылки на реализации демона и синхронизации с кучей серверов, то есть явно не то.