Есть ли ограничения в коде для МК ? Т.е чем ограничивается код, допусти, не желательно использовать много ответвлений (конструкция if...else). Или все зависит от "веса" кода ?
Есть ли ограничения в коде для МК ?
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Здравствуйте!
Есть ли ограничения в коде для МК ? Т.е чем ограничивается код, допусти, не желательно использовать много ответвлений (конструкция if...else). Или все зависит от "веса" кода ?
Есть ли ограничения в коде для МК ? Т.е чем ограничивается код, допусти, не желательно использовать много ответвлений (конструкция if...else). Или все зависит от "веса" кода ?
- Реклама
Размер кода ограничен размером флеша МК. Если размер получается больше нужно либо:
1) брать контроллер потолще (самый простой путь)
2) оптимизировать программу
3) использовать другой язык/компилятор (или вообще ассемблер)
Ну и конечно не стоит ставить кучу строк if...else там, где можно обойтись конструкцией switch-case
1) брать контроллер потолще (самый простой путь)
2) оптимизировать программу
3) использовать другой язык/компилятор (или вообще ассемблер)
Ну и конечно не стоит ставить кучу строк if...else там, где можно обойтись конструкцией switch-case
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
А так МК что одна строчка кода, что сотня (условно), только если сотня значительно уменьшится скорость. Правильно ли я понял ???
Каждую строку кода на языке высокого уровня компилятор преобразует в машинные коды (или в один, если это что-то простое). Каждый машинный код выполняется (для AVR) 1 или 2 такта. Так что все просто: 10 одинаковых строк кода с простым оператором (например, вывод в порт) поставленные одна за другой выполняются ровно в 10 раз медленнее, чем одна (при условии, что в выполнение не вмешается прерывание).
вы лучше скажите что вам нужно в конечном итоге
с точки зрения программиста на языке С - МК такой же как и компьютер....одна команда исполняется за 1 такт так что на 16-ти мегагерцах даже вся память МК самого толстого из атмег - 128 килобайт - пробежится 125 раз...но я точно уверен что кроме кода в памяти так же будут и константы-блоки данных-таблички и .тд. это тоже заносится в память программ
но....вообще....одна строчка
a=1.2566 + 2.568 * 2.14;
для МК превратится в 2-3 тысячи
если конечно она первый раз встретилась
дальшейшее использование подобных действий не вызовет особого увелдичения размера прошивки но на выполнение всёравно потребуется очень много тактов...
также довольно ресурсоёмкие и отъедающие память программ есть библиотеки printf ... в мигалках можно обойтись и без них а вот в любой системе с знаковым экраном или того хуже - графическим - эта комманда просто незаменима....
что ещё?
ну есть например в CVAVR и IARe такая проблема - не контролируется вылет за пределы массива....тоесть если есть массив
char a[10];
то если обращаться к например a[10] то это не будет ошибкой и обращение будет идти к ячейке озу следующей за последним элементом массива - а это чревато затиранием переменной там находящейся ...сам недавно 2 часа искал подобную глюку...
да много всякой мелочи есть....это всё прийдёт с опытом...пробуйте...изучайте поле...грабли расставлены до нас и они не передвигаемые....со временем выучите где какие стоят...
с точки зрения программиста на языке С - МК такой же как и компьютер....одна команда исполняется за 1 такт так что на 16-ти мегагерцах даже вся память МК самого толстого из атмег - 128 килобайт - пробежится 125 раз...но я точно уверен что кроме кода в памяти так же будут и константы-блоки данных-таблички и .тд. это тоже заносится в память программ
но....вообще....одна строчка
a=1.2566 + 2.568 * 2.14;
для МК превратится в 2-3 тысячи
дальшейшее использование подобных действий не вызовет особого увелдичения размера прошивки но на выполнение всёравно потребуется очень много тактов...
также довольно ресурсоёмкие и отъедающие память программ есть библиотеки printf ... в мигалках можно обойтись и без них а вот в любой системе с знаковым экраном или того хуже - графическим - эта комманда просто незаменима....
что ещё?
ну есть например в CVAVR и IARe такая проблема - не контролируется вылет за пределы массива....тоесть если есть массив
char a[10];
то если обращаться к например a[10] то это не будет ошибкой и обращение будет идти к ячейке озу следующей за последним элементом массива - а это чревато затиранием переменной там находящейся ...сам недавно 2 часа искал подобную глюку...
да много всякой мелочи есть....это всё прийдёт с опытом...пробуйте...изучайте поле...грабли расставлены до нас и они не передвигаемые....со временем выучите где какие стоят...
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Реклама
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Просто я только не давно начал изучать МК. Симулировал работу в Proteus. Но, он не всегда воспроизводит происходящие процессы в реальном времени. Вот я и подумал, что если компьютер не справляется, то МК... Сейчас определяюсь с программатором. Буду тогда изучать "в живую", но не хотелось бы чтобы МК был сильно загружен. Поэтому хочу понять как поведет МК в разных ситуациях, до написания кода, чтобы код писать соответствующим образом, и, возможно, облегчить "жизнь" МК 
Последний раз редактировалось cat-dog-god0 Пт ноя 11, 2011 10:45:15, всего редактировалось 1 раз.
Это вы ищите проблему там, где ее нет
Компьютер не справляется, потому что это эмулятор ему же приходится каждую команду контроллера расшифровывать, и делать кучу действий, чтобы это отобразилось в симуляции, не говоря уже о том, что он еще и параллельно сотню других задач выполняет. Не зря с эмуляторе есть счетчик, который отсчитывает реальное (для контроллера) время. А если в регистры залезть, так там еще и счетчик тактов имеется.
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Просто я не знал до недавнего времени, что Ptoteus не всегда симулирует в реальном времени. Я думал, что он не симулирует из-за кода для МК
Шпротеус тебе именно сейчас и именно в том, что ты написал - не помощник.. А даже наоборот - "диверсант"..cat-dog-god0 писал(а): хочу понять как поведет МК в разных ситуациях, до написания кода, чтобы код писать соответствующим образом, и, возможно, облегчить "жизнь" МК
Рассмотреть "поведение МК" до "написания кода" - невозможно.. Т.к. МК будет себя вести так, как этот код написан...
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
у вас в МК стоит операционка реального времени?
МК никогда не простаивает (ну разве в режиме сна но мы ведь про активный режим)
мк всегда чтото делает - или тупит в цикле или выполняет основной набор комманд...но никогда МК не простаивает...ну нет такого понятия для систем без ОперационнойСистемы
потому думать о загрузке МК вообще не нужно.....
я вот сколько не пишу программ - никогда не упирался в скорость МК - всегда скорости просто предостаточно....просто операции требующие мгновенной реакции я или выношу в прерывание или вообще доверяю внешнему блоку-микросхеме-интерфейсу а МК просто считывает оттуда данные...
просто надо помнить что МК не сможет дергать ножкой быстрее 5 мегагерц при тактовой 16 мегагерц....при этом больше он не будет делать ничего
ну..в общем...как то так
а протеус...ну....подождите....он же не только программу симулирует! он же ещё выводы МК симулирует...их сопротивление индуктивность ёмкость....импульсы переходных процессов....а это плавающая точка...очень много вычислений с плавающей точкой...конечно компьютер будет тормозить...особенно если на выводах ещё какие-то аналоговые вещи присутствуют....
МК никогда не простаивает (ну разве в режиме сна но мы ведь про активный режим)
мк всегда чтото делает - или тупит в цикле или выполняет основной набор комманд...но никогда МК не простаивает...ну нет такого понятия для систем без ОперационнойСистемы
потому думать о загрузке МК вообще не нужно.....
я вот сколько не пишу программ - никогда не упирался в скорость МК - всегда скорости просто предостаточно....просто операции требующие мгновенной реакции я или выношу в прерывание или вообще доверяю внешнему блоку-микросхеме-интерфейсу а МК просто считывает оттуда данные...
просто надо помнить что МК не сможет дергать ножкой быстрее 5 мегагерц при тактовой 16 мегагерц....при этом больше он не будет делать ничего
ну..в общем...как то так
а протеус...ну....подождите....он же не только программу симулирует! он же ещё выводы МК симулирует...их сопротивление индуктивность ёмкость....импульсы переходных процессов....а это плавающая точка...очень много вычислений с плавающей точкой...конечно компьютер будет тормозить...особенно если на выводах ещё какие-то аналоговые вещи присутствуют....
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Просто я думал, что есть какие-то ограничения для кода, поэтому Proteus и не симулировал схему как надо. Но, как мне уже сказали есть два основных ограничения: 1) память МК, 2) сам программист. Значит, проще и лучше будет анализировать работу программы "в живую".МитяРа писал(а):Рассмотреть "поведение МК" до "написания кода" - невозможно..
Скажите, а что нужно для программирования МК из аппаратных средств. Т.е. есть МК и... что нужно?
Как вариант рассматриваю вот это:
http://www.chipdip.ru/product/bm9010.aspx
Кроме программатора, ещё те понадобится для начала и макетная плата - для тренировок..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
...и пять проводков в LPT порт....ну и .... руки с минимальным радиусом кривизны....
если кривизна и невнимательность зашкаливают то...ни лучший программатор ни специальные демоплаты ничего не поможет...
просто перед тем как чтото сделать или подать питание - надо 100500 раз все проверить осмыслить...надо подумать что будет при подачем питания...что если МК все ноги в 1 или в 0 выставит...и только тогда подключать питание....
а прошивать МК тем боеле на первых порах - ну 5 проводков с резюками по 100 омм довольно рабочая вещь а чтоб наверняка ничего не пожечь - мк питтать через 100-200 омм резистор...тогда точно ничего не будет даж если перепутать полярность....
П.С. вот вчера сдуру ещё одну кренку спалил реверсом полярности...из неизвестного аккума два черных провода выходили....лень было померять тестером...
ну и конечно же макетка какая-то....простейшая...ну или бесконтактная....там удобнее в разы чтолибо ваять
если кривизна и невнимательность зашкаливают то...ни лучший программатор ни специальные демоплаты ничего не поможет...
просто перед тем как чтото сделать или подать питание - надо 100500 раз все проверить осмыслить...надо подумать что будет при подачем питания...что если МК все ноги в 1 или в 0 выставит...и только тогда подключать питание....
а прошивать МК тем боеле на первых порах - ну 5 проводков с резюками по 100 омм довольно рабочая вещь а чтоб наверняка ничего не пожечь - мк питтать через 100-200 омм резистор...тогда точно ничего не будет даж если перепутать полярность....
П.С. вот вчера сдуру ещё одну кренку спалил реверсом полярности...из неизвестного аккума два черных провода выходили....лень было померять тестером...
ну и конечно же макетка какая-то....простейшая...ну или бесконтактная....там удобнее в разы чтолибо ваять
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
1) купить юсб програмер
2) купить ftf232 и спаять программатор
3) купить парралельный программатор
4) купить старую мамку с LPT - её если что и не жалко
5) купить PCI интерфейсную карту
6) купить юсб-лпт переходник
7) спаять аналог 5 проводков для com порта только там проблема - земля компьютера это будет +10 вольт для МК - иногда довольно опасно
сделать сложный вариант для ком порта на микросхеме max232 - тогда земля МК и земля ПК будут равны и соединены
9)...
10)...
11)...
вариантов тьма
но собрать всяике ec,-асп не предлагаю - проблема курицы и яйца
2) купить ftf232 и спаять программатор
3) купить парралельный программатор
4) купить старую мамку с LPT - её если что и не жалко
5) купить PCI интерфейсную карту
6) купить юсб-лпт переходник
7) спаять аналог 5 проводков для com порта только там проблема - земля компьютера это будет +10 вольт для МК - иногда довольно опасно
9)...
10)...
11)...
вариантов тьма
но собрать всяике ec,-асп не предлагаю - проблема курицы и яйца
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Скажите, если использовать этот программатор (он вроде USB):
http://www.chipdip.ru/product/bm9010.aspx
...куда подключать МК ?
http://www.chipdip.ru/product/bm9010.aspx
...куда подключать МК ?
МК сидит на плате (на макетке или в готовом устройстве), он соединен с разъемом ногами: +питания, CLK, MISO, MOSI, RESET, земля (всего 6, если в программаторе больше - это все земли). К этому разъему подключаем программатор, подаем питание (только не от программатора) на плату, прошиваем.
Пока, очевидно, никуда. Рано ещеcat-dog-god0 писал(а):Скажите, если использовать этот программатор (он вроде USB):
http://www.chipdip.ru/product/bm9010.aspx
...куда подключать МК ?
А вот когда прочтешь внимательно хотя бы один ДШ и аббревиатуры MOSI, MISO, SCK уже не будут китайской грамотой, вопрос отпадет сам собой, бо эти MOSI, MISO, SCK там в схеме, которая открывается по приведенной ссылке, черным по белому и пропечатаны.
- Сообщения: 244
- Зарегистрирован: Вс янв 09, 2011 00:34:11
Спасибо, Engineer_Keen.
Меня смутил кабель. Я думал, что требуются еще платы.
Значит, если использовать этот программатор и макетную плату, то с одной строны провода, идущего на МК, штекер можно срезать и вставлять проводки в макетную плату ???
Меня смутил кабель. Я думал, что требуются еще платы.
Значит, если использовать этот программатор и макетную плату, то с одной строны провода, идущего на МК, штекер можно срезать и вставлять проводки в макетную плату ???
лучше один раз на макетной плате расставить всего 5 штырьков стандартных и уже в них втыкать шлейфик от программатора
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.


