Свежие обсуждения
Микроконтроллеры

Работаем с AVR микроконтроллерами на Ассемблере

1 3 8

Вот именно такую аргументацию обычно и приводят. На микроконтроллерах, кроме C, навскидку называю еще Васик. Проаргументируйте, чем он хуже. На некоторых микроконтроллерах существует PL/M. Проаргументируйте, чем он хуже. Берем сишную программу с PIC, переносим на AVR (или в обратную сторону) - что нужно в ней изменить, можно ли это сделать вообще? Можно ли это сделать любителю? Свой ли С у каждого семейства МК или все-таки общий? Как объяснить любителю работу вот такой конструкции (*proc)(par1,par2)? Не проще ли ему понять icall? Как одни микрокjнтроллеры умудряются обходиться без стека, а другие - нет. Что такое локальные переменные, и почему в одних семействах ими можно пользоваться, а в других нельзя? У тех, кого мы выпускали, ситуация намного хуже - языков-близнецов у них существует с десяток - вот там действительно перлы приходилось выслушивать.

 

chav1961: Что такое локальные переменные, и почему в одних семействах ими можно пользоваться, а в других нельзя?

А в каких нельзя? Уж если на пиках стек умудрились "вкомпилировать", то уж локальные переменные после этого не должны быть проблемой, имхо.

 

Начнем с ATTiny (кроме Tiny13, естественно). Предупреждаю:
1. фокусы с register к стеку никакого отношения не имеют
2. Локальные переменные подразумевают возможность рекурсивного вызова.

 

Да я согласен с Borshef человек который только начал заниматься программированием например смотрит кусок кода на ASM и на C и видит в одном из двух:
-Ага вот тут врубаюсь что к чему а тут понять ничего не могу.
и тогда он делает осознаный выбор в ту или иную пользу.

Max_Pinchuk:
Пишете что любая посылка стоит максимум 300 р. тогда вопрос будете ли вы по интернету заказывать микруху стоимостью 50 р и при этом отдавать 300 р за ее пересылку? Согласитесь смешно
А с Borshef я согласен временами некоторые детали фиг достанешь например нужен был мне как то сдвиговый регистр прогаммируемый по I2C так он в ЧипДипе стоит 44,80 а у меня в городе он только в одной фирме есть на весь город и там берут за него 250 р.

 

В пользу того, что ему понятнее. Об этом и речь. И его в это время ничуть не волнует эффективность, переносимость, экономия памяти, скорость работы и проч. Это "правильно/неправильно" или "нравится/не нравится"? О чем речь-то шла?

 

Что есть локальные переменные, я в курсе. Повторю свой вопрос - почему в одних микроконтроллерах ими пользоваться можно, а в других - нет?

 

Совершенно верно. Локальные переменные подразумевают физическое наличие памяти и аппаратно (либо программно) организованного стека. Наличие их зависит от архитектуры микроконтроллера. А если уж мы полезли в архитектуру, то не только ассемблер, но и С становятся системно-зависимыми. Повторюсь еще раз - выбор языка сначала делается на уровне "нравится/не нравится", а затем к этому выбору за уши притягиваются "научные" аргументы. Вот - на ассемблере получается более быстрый код. Вот - на С получаются переносимые программы. Вот сел любой лох на комп, начал писать на ассемблере, и программа волшебным образом стала быстрой-быстрой А другой сел писать на С - и она стала правильной-правильной, переносимой-переносимой Вот - в умной книге написано, что на таком-то языке получается то-то и то-то. А на самом деле в книгах пишется совсем другое - "во, когда я, автор этой книги, сажусь писать на таком-то языке, то у меня, автора книги, получается то-то и то-то!" И не факт, что любой, последовавший рекомендациям автора, непременно получит то же самое.

 

Max_Pinchuk: Локальные переменные объявляются
в самом начале функции !
т.е. сразу после скобки {

Неправильно
Локальные переменные объявляются внутри функции, в любом месте, а не только в самом начале после скобки.

 

Не совсем так В любом месте переменные можно объявлять в С++, а не в С. Просто большинство нынешних так называемых С-компиляторов на самом деле понимают С++. Простейший пример - типа bool в языке С просто нет, он реализован макросом BOOL, тем не менее в GCC такое обьявление совершенно спокойно прокатывает.

 

Арс: Неправильно
Локальные переменные объявляются внутри функции, в любом месте, а не только в самом начале после скобки.

Давайте так. Локальные переменные могут быть объявлены внутри функции в любом месте, а не только в самом начале после скобки, но только при условии, что эта функция не будет вызвана ранее, чем она была объявлена!