roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 05:34

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как не говнокодить на микроконтроллере? Поделитесь опытом
СообщениеДобавлено: 30 окт 2013, 19:07 
Не в сети

Зарегистрирован: 25 май 2012, 17:19
Сообщения: 7
Доброго времени суток!
Имея некоторый опыт программирования, начал назревать вопрос создания своих библиотек. Так как кодинг на микроконтроллере (пишу для AVR, но думаю, что это не принципиально в даной ситуации) сильно отличается от высокоуровневого программирования, оказалось это не так просто. И обычные советы высокоуровневых программистов здесь не работают.
Взять хотя бы большое количество глобальных переменных, которые никак не засунеш в параметры с указателями из-за прерываний (могу ошибаться, поправьте если не так). Да и есть ли смысл их прятать туда? Насколько больше тактов выедают ф-ции с параметрами нежели без? А если оставляем глобальные переменные, то как делать универсальные библиотеки, подключение которых тянет за собой наименьшее количество телодвижений?
Для большого количества параметров одного обьекта используете структуры? Как это сказывается на быстродействии?

Вопросов по поводу универсальности микроконтроллерного кода очень много.
Поделитесь опытом. Кто какие правила для себя выработал по мере накопления опыта? Кто как достигает оптимального соотношения скорость/обьем?
Если соберется большое количество полезных советов, думаю их можно будет потом обьеденить в статью/инструкцию/мануал. В общем: "Как не говнокодить на микроконтроллере?"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 30 окт 2013, 22:26 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Все зависит от камня на который пишется - 4Кб+256б , 256Кб+64Кб, 1мб...
Вобщем все зависит от обьемов, архитектуры и глюков/фич компилятора

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

хороший тон писать коменты при установке битов, зачем его ставим, а не типа set reg A
Функции - оптимально 1,2 параметра размерности архитектуры, напр 8битные - uint8,char,etc.

по возможности везде юзать unsigned int, char, etc вместо привычных int, char int8, int16.. знаковые операции обычно толще беззнаковых..

еще че вспомню напишу..

Добавлено спустя 2 часа 31 минуту 50 секунд:
Re: Как не говнокодить на микроконтроллере? Поделитесь опытом
по возможности не использовать беззнаковое деление и умножение на 2,4,8,16,... использовать сдвиг в лево право... обычно апаратного делителя и множетеля нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 31 окт 2013, 01:42 
Не в сети

Зарегистрирован: 04 май 2013, 10:35
Сообщения: 203
Откуда: Тюмень
Обычно микроконтроллерные компиляторы достаточно хорошо оптимизируют код, плохо дела обстоят только с некоторыми линкерами. Т.е. при линковке (которая часто подразумевает статическую) не выкидываются неиспользуемые функции.

П.С.
Деление и умножение по степеням 2-ки уже лет 10 назад компиляторы научились оптимизировать, если не больше. Поэтому код лучше писать понятный, если по логике есть деление, значит деление и нужно использовать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 31 окт 2013, 15:49 
Не в сети
Аватара пользователя

Зарегистрирован: 14 ноя 2012, 21:30
Сообщения: 170
Откуда: Моск. обл.
RoboHobbyRu писал(а):
П.С.
Деление и умножение по степеням 2-ки уже лет 10 назад компиляторы научились оптимизировать, если не больше. Поэтому код лучше писать понятный, если по логике есть деление, значит деление и нужно использовать.
А я по привычке "сдвигаю" даже в проектах C# под "винду" и Java под "ведроид" :D.
ЗЫ ...кодить начинал на С++ под Palm OS... как же давно это было :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 31 окт 2013, 18:08 
Не в сети
Аватара пользователя

Зарегистрирован: 01 сен 2009, 14:58
Сообщения: 1142
Откуда: Чехия
прог. языки: C/С++, VHDL, Verilog, ASM, Python
Цитата:
Обычно микроконтроллерные компиляторы достаточно хорошо оптимизируют код

Угу, ток, в моей практике ето только заявленная фича которая работает ток на простеньких проектах, на сложных артефакты вылазают.. Оптимально лучше писать изначально...

Цитата:
Деление и умножение по степеням 2-ки уже лет 10 назад компиляторы научились оптимизировать

Молодое поколение компилятор писателей об етом забыло, если судить по генерируемому листингу..., или работает на платной суперпро версии, в максимальном режиме оптимизации, которая дебаг анфрендли, т.е. толку от нее на сложном проекте 0, ибо дебаг версия не помещается в флеш :crazy:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 31 окт 2013, 23:58 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Для пиков много алгоритмов на microchip.su, особенно в архивах
Но на самом деле... Ну как не говнокодить. Кодить до тех пор пока ты не поймешь, что говнокодишь.
Я вон всю жизнь обнулял таймер в прерывании. И мне казалось это нормальным. Что тут может быть говнокодного.
А оказалось, что этим действием ты вводишь значительную погрешность входа в прерывание.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 01 ноя 2013, 03:10 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Чтобы не говнокодить, нужно знать хорошо архитектуру, т.е. иметь опыт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 01 ноя 2013, 12:18 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
а кроме знания архитектуры - как правильно сказали - кодить и расширять кругозор...

ПС я вот не мог вчера понять почему у меня при отправке пакета через уарт по прерываниям уходит только один символ, оказалось, и это прописано в ДШ, что меня настройки прерывания уарта надо при отключенных глобально прерываниях.. иначе они просто не применяются..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 01 ноя 2013, 16:27 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
Ну так правильно, происходит задержка во времени и сбивка пакета. :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 01 ноя 2013, 17:41 
Не в сети

Зарегистрирован: 25 май 2012, 17:19
Сообщения: 7
Aseris писал(а):
по возможности везде юзать unsigned int, char, etc вместо привычных int, char int8, int16.. знаковые операции обычно толще беззнаковых..

Тоже так пишу, даже в десктопных проэктах.

Aseris писал(а):
обычно геттеры сетеры функций делаю через макра, махатся со стеком на малых контроллерах = путь к геморою и поиску где ж он валится в сложных проектах.

Грамотное использование макросов - очень полезная и важная тема.
Один из способов ее применения:
Код:
#ifndef _name_DEFINED_
#define _name_DEFINED_

//собственно код подключаемого файла

#endif

Использовать в сорцах. Помагает в больших проэктах избежать дублирования подключаемых файлов.

Еще к обязательным я бы вынес использования HEADERов с описанием переменных и функций. Для кого-то эти советы могут показаться банальными, но как показала практика многие, даже очень опытные, ими не пользуются.
Помню как на ПЯТОМ курсе, в процессе написания дипломного проекта, друг открыл для себя табулирования кода.

Madf писал(а):
Чтобы не говнокодить, нужно знать хорошо архитектуру, т.е. иметь опыт.

Так вот я и предлагаю поделится опытом. Кто какие правила для себя определил.

Возвращаясь к вопросу о глобальных переменных и ф-циях с параметрами. Есть ли смысл отказываться от глобальных переменных в пользу параметров, если мы и так крутимся в одном глобальном while(1) и локальные переменные с памяти выгружаться не будут?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 01 ноя 2013, 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Madf писал(а):
Ну так правильно, происходит задержка во времени и сбивка пакета. :D

нет, просто не срабатывает прерывание по опустошению буфера, т.к. оно включалось без выключения глобально прерывания.. это фича железа..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 14 апр 2014, 09:55 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Задумался, как не говнокодить на asm'е... Ушел в глубокую депрессию :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 16 апр 2014, 16:07 
Не в сети

Зарегистрирован: 23 июл 2012, 15:24
Сообщения: 1480
Не мучайтесь, просто возьмите молот... тьфу! Контроллер потолще. Они щас по цене, как трава...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 17 апр 2014, 05:18 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
вот не надо в такой теме такие советы давать...

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как не говнокодить на микроконтроллере? Поделитесь опыто
СообщениеДобавлено: 17 апр 2014, 09:45 
Не в сети

Зарегистрирован: 24 апр 2010, 14:47
Сообщения: 736
Откуда: Уфа
прог. языки: avr asm
Результат моих размышлений о том, как на асм не говнокодить - чаще использовать макросы для повышения самодокументированности кода и изучить препроцессор.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO