jammer312 45 Опубликовано: 18 марта, 2017 Сие ( http://pastebin.com/C0S2m3d8 ) является реализацией программной навигации для робота под eeprom. Здесь уже мелькали реализации подобного, но их все отличает от предложенной большой размер и наличие малоиспользуемых функций. Собственно эта реализация влезает в 780 байт с учетом двух переводов строки после себя (ну мало ли). Имена переменных и функций сокращены настолько, чтобы занимать как можно меньше места, но при этом оставаться осмысленными. Отступы убраны для уменьшения размера. Некоторых проверок "на дурака" нет из тех же соображений. Значимые переменные: ns,nx,ny,nz - направление и три координаты, где x и y образуют горизонтальную плоскость. Изначально робот смотрит в сторону оси x, ось y направлена направо, ось z - вверх. Значимые функции: n_u, n_d - navigation_up/down, движение вверх/вниз; n_f - navigation_forward, движение вперед; n_l, n_r - navigation_left/right - поворот налево/направо; t_t - turn_to, повернуть к, принимает в качестве аргумента число от 0 до 3, задающее новое направление. 0 - направление оси x, далее по порядку по часовой стрелке; n_t - navigate_to, движение к заданой точке, принимает в качестве аргумента координаты точки, в которую требуется проследовать. Сначала передвигается по оси z, затем x и y. Для использования достаточно скопировать код в вашу программу, далее все описанное будет доступно. Если место позволяет, для удобства можно переназвать планируемые к использованию функции (аля "local turn_left=n_l"). Далее у вас будет более 3Кб под остальную часть программы. Надеюсь, кому-нибудь будет полезно. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 18 марта, 2017 Я думаю нет особого смысла экономить на названиях функций. Программа весит 780 байт, да. Но EEPROM даёт место до 4 кб. И кроме твоей программы туда ничего не будет записано. То есть - остаётся огромный кусок неиспользованного места. Плюс запутанные названия функций. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
eu_tomat 2 157 Опубликовано: 18 марта, 2017 Я думаю нет особого смысла экономить на названиях функций. Программа весит 780 байт, да. Но EEPROM даёт место до 4 кб. И кроме твоей программы туда ничего не будет записано. То есть - остаётся огромный кусок неиспользованного места. Плюс запутанные названия функций.Тут всё очень субъективно. Невозможно написать идеальную библиотеку навигации на все случаи жизни, да еще с размещением в EEPROM. Всегда приходится жертвовать либо функционалом, либо скоростью, либо размером, либо ясностью кода. Хотя, я бы тоже предпочел более понятные имена функций с комментариями, а затем пропустить код через crunch или его аналоги. @@jammer312: Насколько я смог понять, эта навигация предназначена для домашнего робота, и ломать препятствия на пути запрещено. Тем не менее, функция перемещения в целевые координаты обязана корректно обрабатывать внезапное появление временных препятствий на пути робота, и по возможности возобновлять движение к цели. Если, конечно, роботы не движутся по предназначенным только для них шахтам и тоннелям. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах