Страница 1 из 2

Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 08:04:03
cat-dog-god0
Здравствуйте!
Есть ли ограничения в коде для МК ? Т.е чем ограничивается код, допусти, не желательно использовать много ответвлений (конструкция if...else). Или все зависит от "веса" кода ?

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 08:37:40
Engineer_Keen
Размер кода ограничен размером флеша МК. Если размер получается больше нужно либо:
1) брать контроллер потолще (самый простой путь)
2) оптимизировать программу
3) использовать другой язык/компилятор (или вообще ассемблер)
Ну и конечно не стоит ставить кучу строк if...else там, где можно обойтись конструкцией switch-case

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 09:16:37
cat-dog-god0
А так МК что одна строчка кода, что сотня (условно), только если сотня значительно уменьшится скорость. Правильно ли я понял ???

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:01:53
Engineer_Keen
Каждую строку кода на языке высокого уровня компилятор преобразует в машинные коды (или в один, если это что-то простое). Каждый машинный код выполняется (для AVR) 1 или 2 такта. Так что все просто: 10 одинаковых строк кода с простым оператором (например, вывод в порт) поставленные одна за другой выполняются ровно в 10 раз медленнее, чем одна (при условии, что в выполнение не вмешается прерывание).

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:22:41
clawham
вы лучше скажите что вам нужно в конечном итоге
с точки зрения программиста на языке С - МК такой же как и компьютер....одна команда исполняется за 1 такт так что на 16-ти мегагерцах даже вся память МК самого толстого из атмег - 128 килобайт - пробежится 125 раз...но я точно уверен что кроме кода в памяти так же будут и константы-блоки данных-таблички и .тд. это тоже заносится в память программ

но....вообще....одна строчка
a=1.2566 + 2.568 * 2.14;

для МК превратится в 2-3 тысячи :) если конечно она первый раз встретилась
дальшейшее использование подобных действий не вызовет особого увелдичения размера прошивки но на выполнение всёравно потребуется очень много тактов...

также довольно ресурсоёмкие и отъедающие память программ есть библиотеки printf ... в мигалках можно обойтись и без них а вот в любой системе с знаковым экраном или того хуже - графическим - эта комманда просто незаменима....

что ещё?
ну есть например в CVAVR и IARe такая проблема - не контролируется вылет за пределы массива....тоесть если есть массив
char a[10];
то если обращаться к например a[10] то это не будет ошибкой и обращение будет идти к ячейке озу следующей за последним элементом массива - а это чревато затиранием переменной там находящейся ...сам недавно 2 часа искал подобную глюку...

да много всякой мелочи есть....это всё прийдёт с опытом...пробуйте...изучайте поле...грабли расставлены до нас и они не передвигаемые....со временем выучите где какие стоят...

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:36:47
cat-dog-god0
Просто я только не давно начал изучать МК. Симулировал работу в Proteus. Но, он не всегда воспроизводит происходящие процессы в реальном времени. Вот я и подумал, что если компьютер не справляется, то МК... Сейчас определяюсь с программатором. Буду тогда изучать "в живую", но не хотелось бы чтобы МК был сильно загружен. Поэтому хочу понять как поведет МК в разных ситуациях, до написания кода, чтобы код писать соответствующим образом, и, возможно, облегчить "жизнь" МК :)

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:44:14
Engineer_Keen
Это вы ищите проблему там, где ее нет :)) Компьютер не справляется, потому что это эмулятор ему же приходится каждую команду контроллера расшифровывать, и делать кучу действий, чтобы это отобразилось в симуляции, не говоря уже о том, что он еще и параллельно сотню других задач выполняет. Не зря с эмуляторе есть счетчик, который отсчитывает реальное (для контроллера) время. А если в регистры залезть, так там еще и счетчик тактов имеется.

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:51:19
cat-dog-god0
Просто я не знал до недавнего времени, что Ptoteus не всегда симулирует в реальном времени. Я думал, что он не симулирует из-за кода для МК

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 10:53:43
МитяРа
cat-dog-god0 писал(а): хочу понять как поведет МК в разных ситуациях, до написания кода, чтобы код писать соответствующим образом, и, возможно, облегчить "жизнь" МК
Шпротеус тебе именно сейчас и именно в том, что ты написал - не помощник.. А даже наоборот - "диверсант"..
Рассмотреть "поведение МК" до "написания кода" - невозможно.. Т.к. МК будет себя вести так, как этот код написан...

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:03:58
clawham
у вас в МК стоит операционка реального времени?
МК никогда не простаивает (ну разве в режиме сна но мы ведь про активный режим)
мк всегда чтото делает - или тупит в цикле или выполняет основной набор комманд...но никогда МК не простаивает...ну нет такого понятия для систем без ОперационнойСистемы
потому думать о загрузке МК вообще не нужно.....
я вот сколько не пишу программ - никогда не упирался в скорость МК - всегда скорости просто предостаточно....просто операции требующие мгновенной реакции я или выношу в прерывание или вообще доверяю внешнему блоку-микросхеме-интерфейсу а МК просто считывает оттуда данные...
просто надо помнить что МК не сможет дергать ножкой быстрее 5 мегагерц при тактовой 16 мегагерц....при этом больше он не будет делать ничего :)
ну..в общем...как то так

а протеус...ну....подождите....он же не только программу симулирует! он же ещё выводы МК симулирует...их сопротивление индуктивность ёмкость....импульсы переходных процессов....а это плавающая точка...очень много вычислений с плавающей точкой...конечно компьютер будет тормозить...особенно если на выводах ещё какие-то аналоговые вещи присутствуют....

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:06:58
cat-dog-god0
МитяРа писал(а):Рассмотреть "поведение МК" до "написания кода" - невозможно..
Просто я думал, что есть какие-то ограничения для кода, поэтому Proteus и не симулировал схему как надо. Но, как мне уже сказали есть два основных ограничения: 1) память МК, 2) сам программист. Значит, проще и лучше будет анализировать работу программы "в живую".
Скажите, а что нужно для программирования МК из аппаратных средств. Т.е. есть МК и... что нужно?
Как вариант рассматриваю вот это:
http://www.chipdip.ru/product/bm9010.aspx

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:09:42
МитяРа
Кроме программатора, ещё те понадобится для начала и макетная плата - для тренировок..

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:14:48
clawham
...и пять проводков в LPT порт....ну и .... руки с минимальным радиусом кривизны....
если кривизна и невнимательность зашкаливают то...ни лучший программатор ни специальные демоплаты ничего не поможет...
просто перед тем как чтото сделать или подать питание - надо 100500 раз все проверить осмыслить...надо подумать что будет при подачем питания...что если МК все ноги в 1 или в 0 выставит...и только тогда подключать питание....
а прошивать МК тем боеле на первых порах - ну 5 проводков с резюками по 100 омм довольно рабочая вещь а чтоб наверняка ничего не пожечь - мк питтать через 100-200 омм резистор...тогда точно ничего не будет даж если перепутать полярность....
П.С. вот вчера сдуру ещё одну кренку спалил реверсом полярности...из неизвестного аккума два черных провода выходили....лень было померять тестером...

ну и конечно же макетка какая-то....простейшая...ну или бесконтактная....там удобнее в разы чтолибо ваять

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:21:01
cat-dog-god0
У меня на компьютере нет LPT порта, как быть ?

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:26:25
clawham
1) купить юсб програмер
2) купить ftf232 и спаять программатор
3) купить парралельный программатор
4) купить старую мамку с LPT - её если что и не жалко
5) купить PCI интерфейсную карту
6) купить юсб-лпт переходник
7) спаять аналог 5 проводков для com порта только там проблема - земля компьютера это будет +10 вольт для МК - иногда довольно опасно
8) сделать сложный вариант для ком порта на микросхеме max232 - тогда земля МК и земля ПК будут равны и соединены
9)...
10)...
11)...
вариантов тьма
но собрать всяике ec,-асп не предлагаю - проблема курицы и яйца :)

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:29:07
cat-dog-god0
Скажите, если использовать этот программатор (он вроде USB):
http://www.chipdip.ru/product/bm9010.aspx
...куда подключать МК ?

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:38:51
Engineer_Keen
МК сидит на плате (на макетке или в готовом устройстве), он соединен с разъемом ногами: +питания, CLK, MISO, MOSI, RESET, земля (всего 6, если в программаторе больше - это все земли). К этому разъему подключаем программатор, подаем питание (только не от программатора) на плату, прошиваем.

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:43:10
Jack_A
cat-dog-god0 писал(а):Скажите, если использовать этот программатор (он вроде USB):
http://www.chipdip.ru/product/bm9010.aspx
...куда подключать МК ?
Пока, очевидно, никуда. Рано еще :?
А вот когда прочтешь внимательно хотя бы один ДШ и аббревиатуры MOSI, MISO, SCK уже не будут китайской грамотой, вопрос отпадет сам собой, бо эти MOSI, MISO, SCK там в схеме, которая открывается по приведенной ссылке, черным по белому и пропечатаны.

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 11:58:21
cat-dog-god0
Спасибо, Engineer_Keen.
Меня смутил кабель. Я думал, что требуются еще платы.
Значит, если использовать этот программатор и макетную плату, то с одной строны провода, идущего на МК, штекер можно срезать и вставлять проводки в макетную плату ???

Re: Есть ли ограничения в коде для МК ?

Добавлено: Пт ноя 11, 2011 12:38:03
clawham
лучше один раз на макетной плате расставить всего 5 штырьков стандартных и уже в них втыкать шлейфик от программатора