Перейти к содержанию

Различается Работа В Симуляторе И В Реальной Схеме. Attiny2313A


Tokes

Рекомендуемые сообщения

Тут вы правы - асамблер не знаю, знать не хочу и не буду. Асм был нужен когда камешки были еще счебенкой...

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

Сейчас по всеми миру от программиста ценится скорость разработки проекта и дальнейшая его поддержка. асм нужен только если я буду искуственно ограничен в ресурсах камня. Чего на данный момент уже редкость. Но выбор языка дело каждого.

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

Но от своей точки зрения не откажусь.

Для начинающего есть единственный правильный метод работы с битами и ето - регистровый сдвиг. Все доводы которые были в другую сторону давали люди которые ОЧЕНЬ далеко не начинающие и по сему уже не видят смысла в некоторых моментах.

Дальнейшую дискуссию преращаю а то действительно Админ накажет! :)

коплю на мечту - Днепр К750

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Не накажет. Не пустая же болтовня.

Асм кроме экономии ресурсов позволяет минимизировать время выполнения, чего не добиться в языках. Но это, действительно, очень трудоемкий процесс и применять его в ширпотребе никак нельзя. Конкуренты удавят.

Так что без языков - и ни туды, и ни сюды.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Не тратьте время на старого лентяя. Мне пока не до изучения языков. :(

Спасибо.

Лучше лекция по теме, чем бесполезные ругательства.
Тут вы правы - асамблер не знаю, знать не хочу и не буду. Асм был нужен когда камешки были еще счебенкой...
Ну и зря. Ассемблер нужен не столько для того чтобы на нем писать, тут Вы, пожалуй, правы, скорость разработки важнее. Ассемблер нужен для понимания принципа функционирования контроллера и поиска хитрых багов. Иногда без дизассемблера весьма тяжко. Именно поэтому начинать серьезное изучение камня ВСЕГДА надо с ассемблера. Конечно, если не планируете этим заниматься - купите Ардуину и не парьтесь. Однако, смею надеяться, на радиотехническом форуме, такой подход не будет популярным.
Асм кроме экономии ресурсов позволяет минимизировать время выполнения, чего не добиться в языках.
На некоторые задачи у AVR не хватит скорости даже на максимальной, недокументированной частоте, а применять более скоростной контроллер все еще нецелесообразно. Я искренне восхищаюсь программистами, запихнувшими программную реализацию USB в 2.5кБайта кода и 12МГц частоты (vusb, если кому интересно). Как думаете, удалось бы им это, если бы они пренебрегали ассемблером? Если что, применений у этой библиотеки порядочно.
Все доводы которые были в другую сторону давали люди которые ОЧЕНЬ далеко не начинающие и по сему уже не видят смысла в некоторых моментах.
Угу, таких, как правильное оформление кода, улучшение его читабельности, логичности и прочего. Конечно, самый правильный способ - выставлять битики в UBRR (на самом деле там должно быть число, определяющее скорость работы встроенного модуля USART, обычно оно вычисляется по формуле из даташита, и это именно осмысленное число, а не набор флагов прим. для "старых лентяев")!

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Ну и зря. Ассемблер нужен не столько для того чтобы на нем писать, тут Вы, пожалуй, правы, скорость разработки важнее. Ассемблер нужен для понимания принципа функционирования контроллера и поиска хитрых багов. Иногда без дизассемблера весьма тяжко. Именно поэтому начинать серьезное изучение камня ВСЕГДА надо с ассемблера. Конечно, если не планируете этим заниматься - купите Ардуину и не парьтесь. Однако, смею надеяться, на радиотехническом форуме, такой подход не будет популярным.

Я радиолюбитель! Это мое хобби. Уровень моих запросов не требует асма. Быть спецом по асму нужно только если вы работает программистом камней и зарабатываете этим на жизнь. Ну и смотрите вперед... обьемы инфы растут как и мощностя. Сейчас у меня в кармане мобила мощнее чем компы в игровых клубах в 2000 году. Тоже и с камнями. Тому доказательство СТМ (которые я кстати рассматриваю как нечто промежуточное перед чем то грандиозным) сказите - имея такие мощностя как у стмок - есть ли выигрыш писать на асме?

Я к тому что можно и сейчас - собрать схему на мп39 транзисторах - но не будет ли это мамонтизмом?

коплю на мечту - Днепр К750

Ссылка на комментарий
Поделиться на другие сайты

То есть Вы официально признаете, что в соседней теме устроили видеокурс по говнокодингу? Если уж взялись учить - освойте хоть сами тему на приемлемом уровне, а не на уровне Ардуинщика-музыканта.

Ну и смотрите вперед... обьемы инфы растут как и мощностя.
То, что мощности растут - повод и для роста производительности конечного устройства, а не наоборот. Отдельный вопрос - для чего эти самые мощности растут? Даже в ПК их по большому счету уже достаточно для бытовых применений. Иллюзии нехватки возникают именно из-за кривого софта, разработчики которого считали "а что, мощности выросли, почему бы не пересчитывать размер базы данных при каждом обращении". Не везде есть возможность воспользоваться этими "возросшими мощностями" (это я не про себя).
Я к тому что можно и сейчас - собрать схему на мп39 транзисторах - но не будет ли это мамонтизмом?
Зависит от задачи. Если она решаема на паре транзисторов или логических элементов - к чему городить компьютер или хотя бы контроллер? Между прочим уже видел где-то вопрос "А как сделать на контроллере, чтобы одной кнопкой зажигать и гасить диод?" По аналогии с ассемблером - может и изучать принцип работы транзистора радиоэлектронику тоже не нужно?
сказите - имея такие мощностя как у стмок - есть ли выигрыш писать на асме?
Писать крупные проекты я бы в любом случае на ассемблере не стал. Но и понимать, во что разворачивается код, тоже надо. Вообще, при увеличении мощности на передний план выходит уже не компактность и скорость, а переносимость и простота поддержки. К тому же едва ли STM так уж сильно потеснят 8-битки. Все же для тех задач они сильно избыточны. Да и для радиолюбителей 100-ногие корпуса с шагом 0,5мм создадут определенные проблемы.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ребята, не накаляйте страстей.

В соседней теме начинающие довольны, получают ответы на вопросы. Все в порядке. Никто их там не собирается премудростям учить. Начало положить - дальше самостоятельно.

Давайте жить дружно. Всем будет полезнее.

:friends:

Ссылка на комментарий
Поделиться на другие сайты

Для начинающего есть единственный правильный метод работы с битами и ето - регистровый сдвиг.

С этим я согласен и даже не пытаюсь оспаривать

Насчет применения инструкции if (PINB &= 0b00010000) - она не имеет смысла и не только из-за архитектуры мк (зачем нужны лишние присваивания, если нужно проверить лишь 1 бит), а именно - регистр PINB только для чтения и запись в него не дает никакого эффекта и контроллер будет считывать PINB только в последний момент.

Например PINB был равен 0b11101111, делая инструкцию PINB &= 0b00010000 получаем следующую конструкцию PINB = PINB & 0b00010000 что соответствует PINB = 0b11101111 & 0b00010000 = 0b00000000, НО после присвоения PINB значения 0b00000000 ничего не изменится и PINB останется при "своих" 0b11101111, дальше компилятор зная что самое главное это считать значение порта в данное мгновение (а не вчера), подставляет команду "считать PINB" и таки его считывает и он равен 0b11101111, отсюда следует что все выше сделанное контроллером было зря и главное получаем в итоге if (PINB){}

Как то так..

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Во, что-то с утра в моей башке проясняется и записывается новое. :)

Насколько я понял, язык Си позволяет указывать последовательность некоторых действий в одной инструкции. Т.е. &= - это два последовательных действия (И и присваивание) для двух операндов.

Еще уточнение, если можно. Порт В в данном случае должен быть заранее настроен на ввод данных извне (с выводов), или подобные инструкции (PINB) перестраивают его на прием данных извне? Я сравниваю с МК51, где я мог считать как физическое состояние выводов, так и состояние регистра порта. Но перестраивать порт на то или иное мне нужно было самостоятельно.

Ссылка на комментарий
Поделиться на другие сайты

Все тоже самое что и в мк51, регистр PINB отражает состояние пинов порта и ничего не меняет. Если даже все выводы порта настроены на выход, все равно для считывания состояния выводов можно (но не желательно) использовать регистр PINB.

Например если один из выводов настроенный на выход будет перегружен (напряжение на нем меньше лог 1) то при чтении PINB данный вывод будет считан как 0, хотя в регистр PORTB была записана 1.

Поэтому регистр PINB лучше использовать только для чтения входов.

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Насколько я понял, язык Си позволяет указывать последовательность некоторых действий в одной инструкции.
Язык Си - гибкая штука, там можно в одно выражение запихнуть достаточно сложные операции. Классический пример - копирование строк while(*(dst++)=*(src++)); В Си нет специального типа для них и строки представляются просто массивами символов, флагом конца служит символ с кодом 0.
я мог считать как физическое состояние выводов, так и состояние регистра порта.
Физическое состояние порта - PINx, записанное Вами же - PORTx, направление вход-выход - DDRx.
или подобные инструкции (PINB) перестраивают его на прием данных извне?
PINB это целый байт, 8 линий ввода-вывода. Не перестраивать же все ради считывания одной.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

То есть Вы официально признаете, что в соседней теме устроили видеокурс по говнокодингу? Если уж взялись учить - освойте хоть сами тему на приемлемом уровне, а не на уровне Ардуинщика-музыканта.

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

Щитаете что АСМ божественнен - сделайте курс для начинающих на асме.

Общаясь с радиолюбителями я увидел прямую зависимость:

Человек старше 30 - кричит что нужно знать только асм - только так! Все остальное полумеры

Человек младще 30 - говорит что С более чем достаточно для реализации любой задачи при уровне современных камней.

Очевидным становиться факт что людям постарше переучиваться сложно, неохота, некогда - и ряд других причин. Я знаю некоторых которые до сих пор например юзают 4 студию. Потому что "я к ней привык. а новая другая там много кнопок и вабще оно все не надо итд"

Налицо - конфликт поколений.

Писать крупные проекты я бы в любом случае на ассемблере не стал. Но и понимать, во что разворачивается код, тоже надо.

Я пишу на С. На сях же получаю ошибки и отлаживаю проект! Какая мне разница во что он там транслируется и как?Может давайте еще вобще В машинном коде сразу смотреть и писать?

Я например планирую после приобретения мотоцикла - разработать для него электронное табло- где будет указание поворотов скорость тахометры одометры и прочие плюшки. Делать это буду на атмеге и каком то цветном дисплеее на 3 дюйма! И писать код на асме - под эту задачу - имея в арсенале от производителя такую гибкую и удобную вещь как С - на мой взгляд верх идиотизма.Но это сугубо мое субьективное мнение.

Вы уже несколько раз упоминали о превосходстве АСМА по скорости итд. Смодулируйте пожалуйта задачу для радиолюбителя в которой решение на асме будет продуктивней. (но учтите - что военные спутники радиолюбитель не разрабатывает - и в основном речь идет о бытовых устройствах)

коплю на мечту - Днепр К750

Ссылка на комментарий
Поделиться на другие сайты

Щитаете что АСМ божественнен - сделайте курс для начинающих на асме.
"Щитаю", что он и так есть на сайте. Вряд ли мне удастся сделать лучше. Есть и именно курс на другом сайте.
Человек старше 30 - кричит что нужно знать только асм - только так! Все остальное полумеры

Человек младще 30 - говорит что С более чем достаточно для реализации любой задачи при уровне современных камней.

Посмотрите мой профиль :-) Я не говорю, что асм божественен или наоборот. Я говорю, что для того, чтобы уметь программировать контроллеры асм знать обязательно. Использовать или нет - другой вопрос. Сейчас действительно, больше кода на Си, на нем быстрее и удобнее программировать. Но понимать как именно контроллер выполняет заложенный в него код все-таки очень полезно. Примеры ошибок и плохих решений от незнания этого тут на форуме полно.
И писать код на асме - под эту задачу - имея в арсенале от производителя такую гибкую и удобную вещь как С - на мой взгляд верх идиотизма.Но это сугубо мое субьективное мнение.

Вы уже несколько раз упоминали о превосходстве АСМА по скорости итд. Смодулируйте пожалуйта задачу для радиолюбителя в которой решение на асме будет продуктивней. (но учтите - что военные спутники радиолюбитель не разрабатывает - и в основном речь идет о бытовых устройствах)

Чукча не читатель? Сколько раз еще нужно повторить, что "знать ассемблер" и "применять только его" - разные вещи?

А примеры - пожалуйста, собственно в этой теме я уже привел один. Второй касается использования совсем мелких контроллеров типа ATtiny10, писать под которые на Си просто невозможно в связи с отсутствием оперативки. Еще можете попробовать написать самозагрузчик (bootloader) размером 128 слов (256 байт, минимальный размер для ATmega8), причем с защитой от неправильных данных, обрыва связи и универсальный, то есть независимый от конкретной схемы (тактовая частота и интерфейс постоянные). Еще можно попробовать написать ОС с вытесняющей многозадачностью (я это уже предлагал Вам), не для конечного устройства, а чтобы разобраться, как работают "взрослые" аналоги.

Может давайте еще вобще В машинном коде сразу смотреть и писать?
А ассемблер от него не слишком отличается: одна команда = одна операция (2-4 байта), именно поэтому и стоит его учить.

Могу еще накидать пару примеров на Си, которые работают не так, как задумано.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Щитаете что АСМ божественнен - сделайте курс для начинающих на асме.

Он уже есть, и вы даже пример оттуда для первого урока брали :3

Налицо - конфликт поколений.

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

И студию 4 используют не потому что в новой больше кнопок, а потому что новая тормознутая, и старые железки не поддерживает (со слов DiHalt'a)

Изменено пользователем Syltetooy
Ссылка на комментарий
Поделиться на другие сайты

Нет, теоретически возможно, хотя на Сях я и не пробовал. Единственная проблема - надо разместить код в секции загрузчика и указать линковщику этот самый размер. Секция называется .bootloader если не ошибаюсь. Посмотрите на заголовок <avr/boot.h>

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Может давайте еще вобще В машинном коде сразу смотреть и писать?

Лучше вы б молчали - умнее казались.

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

Изменено пользователем korsaj
Ссылка на комментарий
Поделиться на другие сайты

Какая мне разница во что он там транслируется и как ?
Очень стыдно за человека, который преподаёт уроки по программированию и пишет подобные фразы...

kobraz, Вас же читают начинающие и учащиеся. Нельзя им говорить подобные вещи :)

Всегда нужно знать свой компилятор и во что он разворачивает код.

Ссылка на комментарий
Поделиться на другие сайты

Отличаются только удобством для программиста: запоминать коды команд и порядок вставки операндов - задача не из приятных. Кроме того, нет меток и макросов. Но эти косметические отличия не отменяют главного - программу на ассемблере контроллер выполняет именно команда за командой, всегда можно предсказать какое значение в каком регистре окажется и сколько это займет времени. В отличие от ЯВУ с их оптимизацией, когда один и тот же кусок кода может выполниться за 1 такт, 100 тактов или не выполниться вообще.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Нет, теоретически возможно, хотя на Сях я и не пробовал. Единственная проблема - надо разместить код в секции загрузчика и указать линковщику этот самый размер. Секция называется .bootloader если не ошибаюсь. Посмотрите на заголовок <avr/boot.h>

не получиться даже теоретически, банально выполнить ту-же команду "spm" уже нужна асм вставка. )

Ссылка на комментарий
Поделиться на другие сайты

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

Пока что приведу пару примеров:

volatile unsigned long time;
ISR(TIM0_OVF){// какой-то счет времени
time++;
}
int main(){
...//настройка таймера, портов ввода-вывода и прочего
while(1){
if(time>3000){time=0; PORTA ^= (1<<0);}
}
}

Почему может не срабатывать обнуление переменной timer в бесконечном цикле? (вопрос для kobraz и прочих новичков)

#define AREF 2.56 //опорное напряжение, В
unsigned int adc_val=ADC;
float voltage=adc_val*AREF/1024;
char str[10];
sprintf(str,"U=%f",voltage);
//вывод str по UART, на дисплей или куда еще

Почему такой код занимает практически весь контроллер ATmega48 (3846 байт флеша и 270 байт ОЗУ, оптимизация -o0, при максимальной - "всего" 1.6 кБайт), даже без учета инициализации? И почему он в некоторых случаях может работать неправильно. Собственно, мне так и не удалось вывести float через sprintf, либо не подключил чего, либо библиотека кривая. Впрочем, мне оно не нужно.

не получиться даже теоретически, банально выполнить ту-же команду "spm" уже нужна асм вставка. )
Хоть бы посмотрели, там это все через макросы и функции реализовано. Изменено пользователем COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Вот нет бы самому посмотреть! Ладно, вот кусок примера из ихней справки

        boot_page_erase (page);
       boot_spm_busy_wait ();      // Wait until the memory is erased.

       for (i=0; i<SPM_PAGESIZE; i+=2)
       {
           // Set up little-endian word.

           uint16_t w = *buf++;
           w += (*buf++) << 8;

           boot_page_fill (page + i, w);
       }

       boot_page_write (page);     // Store buffer in flash page.
       boot_spm_busy_wait]();       // Wait until the memory is written.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Почему может не срабатывать обнуление переменной timer в бесконечном цикле? (вопрос для kobraz и прочих новичков)

Я так понял мне отвечать нельзя...

Ссылка на комментарий
Поделиться на другие сайты

Разве что в личку :-) Впрочем Вы невнимательно читали

вопрос для kobraz и прочих новичков
Изменено пользователем COKPOWEHEU

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...