ssss, Ну .. положим, что радиационно-стойкое исполнение Атмелов - в природе известно и они используются в реальности, а вот что-то подобное от STM я как-то не находил. У наших "(из)го(то)внителей" есть радиационно стойкое исполнение в т.ч. и даже AVR-ок, типа ATmega128A .. так шта, чего вам там у мег "ни хватает" .. больше похоже на неумение их готовить. В прочем, как Вы сами признавались СТМ вы готовить тоже не умеете ни в одном глазу.
.. проприетарщик, говоришь? Когда мои коллеги в молодости свалили в Мелкософт .. они тоже внезапно из специалистов превратились в говноделов .. да как шустро! А мое сотрудничество с Роном Гордоном завершилось в 24 часа сразу после того, как я имел наглость заявить КАК надо поправить "эту функцию" в его "чудо-драйвере - мыслеуловителе"
Вот в это, что проприетарщик - охотно поверю. Ибо Вы народ "подневольный" - сказали что надо прыгать .. у Вас только один выбор: спросить а можно ли приземлиться (с) Асприн 1976г.
положим, что радиационно-стойкое исполнение Атмелов - в природе известно и они используются в реальности, а вот что-то подобное от STM я как-то не находил.
А вот не надо врать, а то уже противно. В тяжёлых условиях юзались ПИКи верии "С" и матричного изготовления, Микрочип при больших партиях предоставлял такую услугу. Вояки юзали ПИК17. Атмэл вообще обходили стороной, с его пришибленным сбросом, генератором и отваливающимся флэшом при смене температур. Сейчас, насколько знаю, юзают аналог СТМ32. Так что о чём вы там грезите мне совершенно непонятно.
Для настольно-наколенного домашнего примения мега ещё как-то, для остального - просто шлак.
Я долго терпел спор, но все же "не вынесла душа поэта".
Вот программа, практически отвечающая на вопрос "кто сильнее: кит или паровоз?", то есть что быстрее искуственное прерывание или функция.
#include <avr/interrupt.h>
// глобалы для передачи параметров
int i=0;
int j=0;
int cnt=0;
// вектор на INT1, просто ногодыг и счетчик "Имитация Бурной Деятельности"
ISR(INT1_vect)
{
// на входе первой операцией погасить пин который нас вызвал, угадаем, почему?
PORTD = PIND | (1<<PD1);
int a;
for (a = 0; a < 4; a++)
{PORTB=(i%(j+a)==0)?(PINB | (1<<(a+4))) : (PINB & (1<<(a+4))); _NOP();}
cnt++;
}
//функция которая делает то же самое, что и прерывание - некий дурацкий ногодрыг
void myfun(void)
{
int a;
for (a = 0; a < 4; a++)
{PORTB=(i%(j+a)==0)?(PINB | (1<<(a+4))) : (PINB & (1<<(a+4))); _NOP();}
cnt++;
}
void setup() {
// это для вызова INT1 записью 0 в порт 2(леонардо), на Нанке - это порт 3
// тут я нарочно функции из ненавидимой многими "гениями" WIRING использовал, чтобы дураков подразнить.
pinMode(2,OUTPUT);
digitalWrite(2, HIGH);
//INT1 управляетя уровнем 0, левел триггеред, панимаш!
EICRA = 0;
Serial.begin(19200);
}
void loop() {
uint32_t om, nm;
cnt = 0;
om = millis();
// 0 - нет внешних прерываний 2, то есть: 00000010 - есть INT1
EIMSK = 0;
// EIMSK = 2;
//некий нагрузочный цикл
for (i = 0; i< 10000; i++)
{
j= (int)i^2%15000;
// комментим либо тут либо ниже
myfun();
// на Леонардо INT1 = PD1, на Нанке PD3
// PORTD = PIND & !(1<<PD1);
}
nm = millis();
// запрещаем внешние прерывания, все, для простоты ;)
EIMSK = 0;
delay(500);
Serial.print("Время на итерацию мкс:");
// если до кого не дошло, то делим на количество тысяч из нагрузочного цикла
Serial.print((nm-om)/10);
Serial.print(" Итераций:");
Serial.println(cnt);
}
На леонардо - функция70 мкс на итерацию, прерывание - 75.
Дальше можете менять и оптимизировать - как желаете, если кто-то реально добъется обратного результата - с меня пузырь! ;) ;) ;)
Условия: передача/возврват - через глобалы. Прерывание INT1, для единообразия. Внутри прерывания не вызывать ничего тяжелого. Не стану объяснять - попробуете - сами поймете почему.
Для сильно возбуждаемых сообщаю, что attachInterrupt() из Wiring дает ровно тот же результат, просто многие в это не верят. А вот в прерывании вызывать библиотечный digitalWrite() нельзя. Поэтому и в функции я его на прямую запись поменял. Угадайте, блин, почему? Спорщики хреновы!
-------------------------
честно говоря уже порядком достало сферическое програмирование в вакууме.
====================
Еще: если найдутся очень умные, которые скажут, что компилятор наоптимизировал всего один вызов функции и бла-бла-бла!
Так вот ели понакидать из еще пяток в разные места, то станет не 70, а 71 мкс, я уже проверил.
Я долго терпел спор, но все же "не вынесла душа поэта".
Вообще-то спор уже давно закончился, что называется, за явным преимуществом. Как-то вы припозднились c участием в сражении. Душа поэта, прежде, чем не вынести, видать, долго оттормаживалась.
Цитата:
А вот в прерывании вызывать библиотечный digitalWrite() нельзя. Поэтому и в функции я его на прямую запись поменял. Угадайте, блин, почему? Спорщики хреновы!
Угадывают пусть престарелые командующие дивизиями программистов. Лично я пока не соображу, почему digitalWrite() нельзя вызывать в прерывании. Вы бы как-нибудь пояснили эту вашу глубокую мысль.
Лично я пока не соображу, почему digitalWrite() нельзя вызывать в прерывании. Вы бы как-нибудь пояснили эту вашу глубокую мысль.
Ну Вы же тоже в этом отвратительном фарсе принимали участие, и то, что Вы формально правы никак не умаляет Ваши "заслуги".
Нельзя использовать потому, что длинная и прерывание может несколько раз сработать. Первой командой нужно убрать условие возникновения преерывания, то есть записать 1 в ИНТ1. Если для этого вызывать б иблиотечную функцию, то мы перезайдем в прерывание раза 3-4, у меня так выходило. После снятия ИНТ1 можно все, что не содержит внутри себя sei(), использовать.
Ну Вы же тоже в этом отвратительном фарсе принимали участие, и то, что Вы формально правы никак не умаляет Ваши "заслуги".
Я вас спрашивал, почему нельзя функцию вызывать, вы мне тут про какие-то морально-этические нюансы задвигать начинаете. Зачем офтопите? Тоже хочется в "отвратительном фарсе" участие принять, хоть и с запозданием?
Цитата:
Нельзя использовать потому, что длинная и прерывание может несколько раз сработать.
Насколько я помню, говорили о том, что можно использовать прерывание вместо функции. В таком варианте, ответственность за вызовы подобного прерывания-функции лежит на программисте. Так что всякие "может несколько раз" при правильном подходе исключаются.
Цитата:
После снятия ИНТ1 можно все, что не содержит внутри себя sei(), использовать
В wiring_digital.c нет ни одного sei(). Похоже, что ваше категоричное "вызывать в прерывании нельзя", слегка ошибочно.
Неужели не любопытно просто погонять пример сверху?
А зачем мне его гонять? Я и так вижу, что он кривой, как турецкая сабля. Вы выбрали условие для генерации прерывания "вызывать всегда, пока ноль", а потом удивляетесь, что прерывание у вас вызывается снова и снова. Не поняв в чем дело, вы начали валить все шишки на digitalWrite(), которая тут вообще не при делах. А всего и надо было, условием выбрать "смена состояния из единицы в ноль (Falling Edge)":
EICRA = (1 << ISC11);
И благодать бы не замедлила тотчас же снизойти.
Цитата:
Критерий истины - практика, так нас в школе учили, еще в СССР.
Как-то видать не очень вы усвоили, чему вас учили. Вы прибегаете к непонятной практике, из которой извлекаете сомнительные истины. Вместо того, чтобы тратить силы на выражение собственного торжества в комментариях, вы бы лучше на изучение прерываний подналегли.
Так вот ели понакидать из еще пяток в разные места, то станет не 70, а 71 мкс, я уже проверил.
Разница между функцией и прерыванием в том, что функция свободна в использовании R18–R27, R30, R31, а прерывание нет. Поэтому, если вызывать функцию не из loop() вызываемой без параметров, а из функции с пачкой параметров (или заиспользовать все эти регистры в loop() локальными переменными), то перед вызовом функции компилятор вынужден будет сохранять эти регистры, что увеличит затраты на вызов функции.
Если же еще пин порта дергать не из C (чтение из порта, изменение бита, запись в порт), а asm {"sbi/cbi ..."}, то сэкономим еще 2 такта.
В любом случае:
- у AVR нет резервного регистра флагов, который можно использовать в коротких прерываниях, полностью выполняющихся в режиме запрещенных прерываний (+2 такта)
- у AVR нет возможности сохранить регистр флагов в стеке и вынуть его из стек (+6 тактов)
В итоге, выиграть на прерывании возможно столь мало, что, как верно было подмечено выше, "спор не стоит выеденного яйца".
Я тут уже повертел SPI через прерывания и без. Без них существенно быстрее (
Может быть, всё-таки "тема не стоит выеденного яйца" не потому что у AVR "чего=то там не хватает", а тупо по причине того, что программирование микроконтроллеров В ЦЕЛОМ должно производиться НЕ ТАК, как программирование десктопных приложений и С++ с его выкрутасами в ООП тут "рядом не валялся"?
Замечу, что у ARM ваще нет "вызова функций" и все сохранения в стеке надо делать ручками .. :)
Может быть, всё-таки "тема не стоит выеденного яйца" не потому что у AVR "чего=то там не хватает",
Унылость АВР по любому накладывает свой отпечаток, тут уж никуда не деться.
Цитата:
а тупо по причине того, что программирование микроконтроллеров В ЦЕЛОМ должно производиться НЕ ТАК, как программирование десктопных приложений и С++ с его выкрутасами в ООП тут "рядом не валялся"?
В общем - да.
Цитата:
Замечу, что у ARM ваще нет "вызова функций" и все сохранения в стеке надо делать ручками .. :)
Детка, когда у тебя бред, не пиши в форум. Он не для этого предназначен )
Цитата:
И "повертел SPI" можно сразу вертеть. Повертите 1-вирэ или ЮАРТ.
Если я сказал, "повертел", значит повертел, в том числе и USART. На поллинге удалось вписаться в 16 (UBRRnH=UBRRnL=0, Fclk/2) тактов всегда. В самом цикле, после передачи команды и первого байта данных - в 12 тактов. Попробуй впишись на прерываниях, когда бредить перестанешь:
Если я сказал, "повертел", значит повертел, в том числе и USART. На поллинге удалось вписаться в 16 (UBRRnH=UBRRnL=0, Fclk/2) тактов всегда. В самом цикле, после передачи команды и первого байта данных - в 12 тактов. Попробуй впишись на прерываниях,
ВпИсался? Иди меняй подгузники! Пффффффф! Он на хардварном впИсался! ))))))))))))))))
На задротном СТМ8 115200, 230400 софтварный ЮАРТ легко выгребается. )))))))))))))
Ты софтварный ЮАРТ без прерываний сделай, чтобы хоть что-то ещё могло работать, тот-же 1-вирэ например, и ИР-приём с пульта добавь ещё для верняка. Слабо? )))))))))))
Или знаешь как рулить голыми функциями при асинхронной работе нескольких периферийных устройств? Ну-ну! ))))))))
Да ничего ты не понял, у тебя понималка сломалась. ))))))))))
Нахрен твой SPI, когда он при любом раскладе прерывный, т.е максимум один фиг не выжать. Поллинг отнимает полезное время у МК. И ты совсем не понимаешь для чего нужны прерывания.
Цитата:
Говорил же,
Лучше бы ты жевал. )))))))))))))
Цитата:
отдохни
Я и так отдыхаю, а ты истеришь по незнанию. ))))))))))))))
Я долго терпел спор, но все же "не вынесла душа поэта".
Вот программа, практически отвечающая на вопрос "кто сильнее: кит или паровоз?", то есть что быстрее искуственное прерывание или функция.
Запустил Ваш код на нано, с легким допилингом, через прерывания 79мкс, через подпрограмму 75мкс. Подпрограмму кстати оптимизация сожрала, если заставить чтоб была - действительно +1мкс.
Дак и вот программа, с легким допилингом, под нану. На основе вашего же кода.
#include <avr/interrupt.h>
#define PD3 3
#define _NOP() asm volatile ("nop")
int d;
int d1;
int d2;
int d3;
int d4;
int d5;
int d6;
int d7;
int d8;
#define DURNOY_GRUZ d8=d1+d2+d3+d4+d5+d6+d7+d;d7=cnt+d2+d3+d4+d5+d6+d7;d6=1+d2+d3+d4+d5+d6+d7;d5=d8+d2+d3+d4+d5+d6+d7;d=d3+d4+d5+d6+d7;
// глобалы для передачи параметров
int i=0;
int j=0;
int cnt=0;
// вектор на INT1, просто ногодыг и счетчик "Имитация Бурной Деятельности"
ISR(INT1_vect)
{
// на входе первой операцией погасить пин который нас вызвал, угадаем, почему?
//PORTD = PIND | (1<<PD3);
PORTD |= (1<<PD3);
int a;
for (a = 0; a < 4; a++)
{PORTB=(i%(j+a)==0)?(PINB | (1<<(a+4))) : (PINB & (1<<(a+4))); _NOP();}
cnt++;
}
//функция которая делает то же самое, что и прерывание - некий дурацкий ногодрыг
void myfun(void)
{
int a;
for (a = 0; a < 4; a++)
{PORTB=(i%(j+a)==0)?(PINB | (1<<(a+4))) : (PINB & (1<<(a+4))); _NOP();}
cnt++;
}
void setup() {
// это для вызова INT1 записью 0 в порт 2(леонардо), на Нанке - это порт 3
// тут я нарочно функции из ненавидимой многими "гениями" WIRING использовал, чтобы дураков подразнить.
pinMode(3,OUTPUT);
digitalWrite(3, HIGH);
//INT1 управляетя уровнем 0, левел триггеред, панимаш!
EICRA = 0;
Serial.begin(19200);
}
void loop() {
uint32_t om, nm;
cnt = 0;
om = millis();
// 0 - нет внешних прерываний 2, то есть: 00000010 - есть INT1
// EIMSK = 0;
EIMSK = 2;
//некий нагрузочный цикл
for (i = 0; i< 10000; i++)
{
j= (int)i^2%15000;
// комментим либо тут либо ниже
DURNOY_GRUZ;
// myfun();
// на Леонардо INT1 = PD1, на Нанке PD3
// PORTD = PIND & !(1<<PD1);
// PORTD = PIND & !(1<<PD3);
PORTD &= ~(1<<PD3);
DURNOY_GRUZ;
}
nm = millis();
// запрещаем внешние прерывания, все, для простоты ;)
EIMSK = 0;
delay(500);
Serial.print("Время на итерацию мкс:");
// если до кого не дошло, то делим на количество тысяч из нагрузочного цикла
Serial.print((nm-om)/10);
Serial.print(" Итераций:");
Serial.println(cnt);
}
Гонял на нано. Через прерывания 83мкс, через подпрограмму 89мкс. Таки прерывания немного быстрей, при условии более высокой загрузки.
ПС. практика без понимания происходящего - слепое тыканье в надежде на везение. увы. Да, еще, "мушку спили!" а то слишком борзо вышло, а так тут нельзя, т.к. тут культурные люди друг друга нахер посылают
Гонял на нано. Через прерывания 83мкс, через подпрограмму 89мкс. Таки прерывания немного быстрей, при условии более высокой загрузки.
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции. Вы подогнали решение под требуемый результат. Я сомневаюсь, что существует реальная задача или алгоритм, где это могло бы иметь практическое применение.
Гонял на нано. Через прерывания 83мкс, через подпрограмму 89мкс. Таки прерывания немного быстрей, при условии более высокой загрузки.
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции. Вы подогнали решение под требуемый результат. Я сомневаюсь, что существует реальная задача или алгоритм, где это могло бы иметь практическое применение.
Зря сомниваетесь. Пример - расчетный блок (и вобщем не обязательно расчетный, просто требующий много ресурса) и вывод промежуточных значений. Функции вывода никак не связана с самим расчетом.
И логическим анализатором умеешь пользоваться? Ну так и выкладывай картинку своего СПИ, посмеёмся! )))))))))))
И что там у тебя, СТ7735 мелькнуло? Тогда могу заявить, что на СТМ32Ф1хх, при родном СПИ тольков 8 и 16 бит, легко получается СПИ 9 или 18 бит в непрерывном режиме на максимальной скорости и хардварно! ))))))))))
Хотя, если честно, там и 19,20,21,22... получается. А у тебя получается? )))))))))))))))
А по поводу что такое прерывный и непрерывный - тебе на курсы по русскому языку. ))))))))))
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции.
А что предлагаете вы? Не вызывать худые функции из жирных? Зашибись решение проблем! )))))))))))))))
При чем тут STM? Ты заголовок темы хоть удосужился прочитать? )))
А притом, что ты не знаешь ни Меги, ни СТМ, ты ничего не знаешь! Ты даже не знаешь как работает СПИ, а только пучишь глаза, брызжешь слюной и пальцы раскорячиваешь. Ты ноль!
И где картинка? Или стало стыдно за свои незнания?
Зря сомниваетесь. Пример - расчетный блок (и вобщем не обязательно расчетный, просто требующий много ресурса) и вывод промежуточных значений. Функции вывода никак не связана с самим расчетом.
Чет я не понял, "вывод промежуточных значенией" и "функция не связана с расчетом", они как соотносятся? Если функция выводит данные полученные в расчетном блоке, то она с ним связана, т.к. оперирует данными расчетного блока. В этом случае и переключения контекста не случится и временных потерь не образуется -- данные общие, своповать никуда ничего не нужно. В вашем же примере присходят события полностью изолированные друг от друа. В этом случае мне сложно придумать обоснование, зачем надо разрывать блок вычислений, чтобы вызвывать левую фукцию в этом месте. Пример страдает нелогичностью действий.
ssss пишет:
А что предлагаете вы? Не вызывать худые функции из жирных? Зашибись решение проблем!
Я предлагаю приводить примеры осмысленных действий, а не абы какой замут, лишь бы результат подогнать.
В вашем же примере присходят события полностью изолированные друг от друа. В этом случае мне сложно придумать обоснование, зачем надо разрывать блок вычислений, чтобы вызвывать левую фукцию в этом месте. Пример страдает нелогичностью действий.
А свитч... не оно? Вычисления свитча могут быть не такими уж простыми, а по результату может вызываться что угодно.
Я предлагаю приводить примеры осмысленных действий, а не абы какой замут, лишь бы результат подогнать.
А где тут замут? Для того чтобы понять что к чему, нужно перебрать все возможные варианты, а не только те, которые кому-то нравятся больше. Ведь в этом эмбедд и заключается, добиться наилучшего результата и безглючной работы.
Тут некоторые верят, что поллингом добиваются максимальной скорости СПИ на меге, но мы то знаем, что это не так. Или тоже не знаем?
ПС. практика без понимания происходящего - слепое тыканье в надежде на везение. увы. Да, еще, "мушку спили!" а то слишком борзо вышло, а так тут нельзя, т.к. тут культурные люди друг друга нахер посылают
Логик! Ну Вы то зачем на меня наезжаете? Я же ни с кем не спорю, как можно заметить.
Нашли способ сделать не +4, а -6 мкс - здорово! Я завтра утром погоняю тоже на нанке, для единообразия.
Я как раз сторонник вот такого нормального диалога, без вентиляторов и лопат с дерьмом.
Я не стал в форуме править, но в программе еще волатили стояли на i,j,cnt. Немного другой код у компилятора должен выходить.
..............
Насчет "слепого тыкания", ну ведь Вы же знаете, что это не про меня! Мне в выше приведенном споре как раз и не нравилось кидание калом друг в друга. Зачем уподобляться? Мы же примерно представляетм уровень друг друга. И спорщики выше - тоже представляют. Можно же точку зрения высказывать и аргументы?
Я нахер наглых новичков-неучей люблю посылать, которые считают, что тут им все должны быстро объяснить "из чего, на самом деле, тетка сделана". Но между специалистами ругань - жутко раздражает своей бессмысленностью.
Знаете, типа того: "Я весь даташит наизусть знаю!", "А я два, нет! - ТРИ даташита наизусть помню, и wiring вслепую перепишу!".
А свитч... не оно? Вычисления свитча могут быть не такими уж простыми, а по результату может вызываться что угодно.
Свитч -- не оно. Блок свича будет выполняться до вызова целиком, а не пол-блока до вызова, пол-блока после. Точно так же можно перенести вызов функции в позицию после вычислительного блока из примера выше и никакого пенальти по времени выполнения уже не будет и в помине.
Цитата:
Для того чтобы понять что к чему, нужно перебрать все возможные варианты, а не только те, которые кому-то нравятся больше.
Вот и перебирайте, если заняться нечем. Изучайте примеры кода, не выполняющего осмысленных действий. Учредите премию за сомнительные достижения в эмбеде. В общем, есть где блеснуть таким образом.
wdrakula пишет:
Логик! Ну Вы то зачем на меня наезжаете?
Вы продолжаете настаивать, что комментарии в коде были остроумными?
Вот и перебирайте, если заняться нечем. Изучайте примеры кода, не выполняющего осмысленных действий. Учредите премию за сомнительные достижения в эмбеде. В общем, есть где блеснуть таким образом.
Мне и даром не надо. Я уже давно знаю что лучше, как и на каком камне.
Да вы уж определитесь как нибудь, а то всё это как-то загадочно на уровне кофейной гущи звучит.
Звучит столь же конкретно, как ваше отправное "Я уже давно знаю что лучше, как и на каком камне."
Цитата:
Ну и никто вам не мешает попробовать что-то однотипное на ПИК16/18/24, на меге и на СТМ, для общего развития и понимания что к чему.
За исключением пиков (которые лично мне нафиг не сдались) вы абсолютно в курсе, что я сейчас именно тем и занимаюсь, что в рамках одного проекта пилю устройства на меге, стм8 и стм32. Вы даже сюда таскали выжимки из моих сообщений с той ветки, где я пишу о том, что у меня получается. Но вдруг в какой-то момент вас разбивает полнейшая амнезия, что вы начинаете пафосно мне советовать чего-то там попробвать на меге и стм, чтобы сравнить. Допились таки? Белочка пожаловала?
Звучит столь же конкретно, как ваше отправное "Я уже давно знаю что лучше, как и на каком камне."
А вас это сильно смущает, раздражает или злит? И что вас больше злит, мои знания или ваши незнания?
Цитата:
вы абсолютно в курсе, что я сейчас именно тем и занимаюсь, что в рамках одного проекта пилю устройства на меге, стм8 и стм32. Вы даже сюда таскали выжимки из моих сообщений с той ветки, где я пишу о том, что у меня получается. Но вдруг в какой-то момент вас разбивает полнейшая амнезия, что вы начинаете пафосно мне советовать чего-то там попробвать на меге и стм, чтобы сравнить.
Что, уже сравнили? Ну и каковы результаты? Или не можете оторваться от сравнения? ))))))))))))))))))
Если до сих пор сравниваете, значит что-то у вас плохо с пониманием. Иначе сравнение давно бы уже сменилось выбором.
А вас это сильно смущает, раздражает или злит? И что вас больше злит, мои знания или ваши незнания?
Только от вас и узнаю, что меня, оказывается, что-то злит. Насчет ваших знаний и вовсе судить не могу, т.к. вы их никому не демонстрировали.
Цитата:
Если до сих пор сравниваете, значит что-то у вас плохо с пониманием. Иначе сравнивание сменилось бы выбором.
О каком еще сравнении речь? Вообще-то я вам уже рассказывал, где и по какой причине я использовал тот или иной МК. Вы мне на это, помнится ответили, что везде надо было применять один и тот же. На мои возражения, что тогда это будет иметь последствия в виде кучи лишнего гемора, вы не нашли ничего лучшего, как посоветовать загеморроиться по полной, т.к. по вашим словам, если я не сделаю этого сейчас, то страшный геммор настигнет меня когда-нибудь потом. Мало того, что такие предсказания будущего, мягко говоря, не убедительны, так и убийственный совет срочно кинуться прошибать лбом стены, сильно страдает от повышенной дозы идиотизма. Я ничего не ведаю про ваши знания, но вот советы от вас сыплются просто никуда не годные, что, как-бы, навевает.
О каком еще сравнении речь? Вообще-то я вам уже рассказывал, где и по какой причине я использовал тот или иной МК. Вы мне на это, помнится ответили, что везде надо было применять один и тот же. На мои возражения, что тогда это будет иметь последствия в виде кучи лишнего гемора, вы не нашли ничего лучшего, как посоветовать загеморроиться по полной, т.к. по вашим словам, если я не сделаю этого сейчас, то страшный геммор настигнет меня когда-нибудь потом.
И что я не так сказал? Вам нравится идти своим путём, наступая на грабли и набивая шишки? Это ваш выбор, вам и разргебать его последствия.
Цитата:
Мало того, что такие предсказания будущего, мягко говоря, не убедительны, так и убийственный совет срочно кинуться прошибать лбом стены, сильно страдает от повышенной дозы идиотизма. Я ничего не ведаю про ваши знания, но вот советы от вас сыплются просто никуда не годные, что, как-бы, навевает.
Я не проповедник, чтобы убеждать. Примеры были приведены, сколько народа свалило на СТМ после таких советов я и говорить не буду. Но это всё не для вас. У вас привычка искать причины неудач на стороне, а не в самом себе. Блин, ну я же не доктор, чтобы лечить ваши комплексы.
И что я не так сказал? Вам нравится идти своим путём, наступая на грабли и набивая шишки? Это ваш выбор, вам и разргебать его последствия.
О каких граблях и шишках спич, уважаемый? Можно подумать, что вы лучше меня знаете, что тут у меня творится. На той ветке форума, которую вы любите посещать инкогнито, можно проследить, сколько времени прошло с момента, как я задумал, а потом физически организовал проброс данных с беспроводного сенсора до серверов IoT. Изготовление устройств на атмеге и стм8 заняло минимум времени. С тех пор они так и работают 24/7 и о каких граблях и шишках вы тут несете, понятия не имею.
Цитата:
Я не проповедник, чтобы убеждать. Примеры были приведены, сколько народа свалило на СТМ после таких советов я и говорить не буду. Но это всё не для вас. У вас привычка искать причины неудач на стороне, а не в самом себе.
Ну красавец! Не моргнув глазом и не сходя с места, изобрел мои неудачи, плюс наградил еще дурной привычкой. Фнатастику бы лучше писали с такими-то наклонностями, а не по форумам ошивались.
К слову сказать, больше всего времни заняло не написание специфичного кода для трех разных МК, а раскуривание NRF24L01. И если просто запустить пару приемник-передатчик -- это плевое дело, то вникнуть, что еще может этот чип и как этого от него добиться, заняло не одну неделю. Радио-чип, безусловно, очень красивый, если наблюдать его внутреннее устройство и понимать, как все это работает.
Вот забавный фантазер. Все, что не может на деле, фантазиями добирает.
Вот забавный фантазер. Все, что не может на деле, фантазиями добирает.
Это не фантазии, а знание даташита и референса и реальная работа с железом. ))))))))))))))))
Последнее больше похоже на заговор на удачу.
ssss, Ну .. положим, что радиационно-стойкое исполнение Атмелов - в природе известно и они используются в реальности, а вот что-то подобное от STM я как-то не находил. У наших "(из)го(то)внителей" есть радиационно стойкое исполнение в т.ч. и даже AVR-ок, типа ATmega128A .. так шта, чего вам там у мег "ни хватает" .. больше похоже на неумение их готовить. В прочем, как Вы сами признавались СТМ вы готовить тоже не умеете ни в одном глазу.
.. проприетарщик, говоришь? Когда мои коллеги в молодости свалили в Мелкософт .. они тоже внезапно из специалистов превратились в говноделов .. да как шустро! А мое сотрудничество с Роном Гордоном завершилось в 24 часа сразу после того, как я имел наглость заявить КАК надо поправить "эту функцию" в его "чудо-драйвере - мыслеуловителе"
Вот в это, что проприетарщик - охотно поверю. Ибо Вы народ "подневольный" - сказали что надо прыгать .. у Вас только один выбор: спросить а можно ли приземлиться (с) Асприн 1976г.
положим, что радиационно-стойкое исполнение Атмелов - в природе известно и они используются в реальности, а вот что-то подобное от STM я как-то не находил.
А вот не надо врать, а то уже противно. В тяжёлых условиях юзались ПИКи верии "С" и матричного изготовления, Микрочип при больших партиях предоставлял такую услугу. Вояки юзали ПИК17. Атмэл вообще обходили стороной, с его пришибленным сбросом, генератором и отваливающимся флэшом при смене температур. Сейчас, насколько знаю, юзают аналог СТМ32. Так что о чём вы там грезите мне совершенно непонятно.
Для настольно-наколенного домашнего примения мега ещё как-то, для остального - просто шлак.
Я долго терпел спор, но все же "не вынесла душа поэта".
Вот программа, практически отвечающая на вопрос "кто сильнее: кит или паровоз?", то есть что быстрее искуственное прерывание или функция.
На леонардо - функция70 мкс на итерацию, прерывание - 75.
Дальше можете менять и оптимизировать - как желаете, если кто-то реально добъется обратного результата - с меня пузырь! ;) ;) ;)
Условия: передача/возврват - через глобалы. Прерывание INT1, для единообразия. Внутри прерывания не вызывать ничего тяжелого. Не стану объяснять - попробуете - сами поймете почему.
Для сильно возбуждаемых сообщаю, что attachInterrupt() из Wiring дает ровно тот же результат, просто многие в это не верят. А вот в прерывании вызывать библиотечный digitalWrite() нельзя. Поэтому и в функции я его на прямую запись поменял. Угадайте, блин, почему? Спорщики хреновы!
-------------------------
честно говоря уже порядком достало сферическое програмирование в вакууме.
====================
Еще: если найдутся очень умные, которые скажут, что компилятор наоптимизировал всего один вызов функции и бла-бла-бла!
Так вот ели понакидать из еще пяток в разные места, то станет не 70, а 71 мкс, я уже проверил.
Вообще-то спор уже давно закончился, что называется, за явным преимуществом. Как-то вы припозднились c участием в сражении. Душа поэта, прежде, чем не вынести, видать, долго оттормаживалась.
Угадывают пусть престарелые командующие дивизиями программистов. Лично я пока не соображу, почему digitalWrite() нельзя вызывать в прерывании. Вы бы как-нибудь пояснили эту вашу глубокую мысль.
Лично я пока не соображу, почему digitalWrite() нельзя вызывать в прерывании. Вы бы как-нибудь пояснили эту вашу глубокую мысль.
Ну Вы же тоже в этом отвратительном фарсе принимали участие, и то, что Вы формально правы никак не умаляет Ваши "заслуги".
Нельзя использовать потому, что длинная и прерывание может несколько раз сработать. Первой командой нужно убрать условие возникновения преерывания, то есть записать 1 в ИНТ1. Если для этого вызывать б иблиотечную функцию, то мы перезайдем в прерывание раза 3-4, у меня так выходило. После снятия ИНТ1 можно все, что не содержит внутри себя sei(), использовать.
Я вас спрашивал, почему нельзя функцию вызывать, вы мне тут про какие-то морально-этические нюансы задвигать начинаете. Зачем офтопите? Тоже хочется в "отвратительном фарсе" участие принять, хоть и с запозданием?
Насколько я помню, говорили о том, что можно использовать прерывание вместо функции. В таком варианте, ответственность за вызовы подобного прерывания-функции лежит на программисте. Так что всякие "может несколько раз" при правильном подходе исключаются.
В wiring_digital.c нет ни одного sei(). Похоже, что ваше категоричное "вызывать в прерывании нельзя", слегка ошибочно.
Неужели не любопытно просто погонять пример сверху? Критерий истины - практика, так нас в школе учили, еще в СССР.
Я ни с чем не спорю, если что.
А зачем мне его гонять? Я и так вижу, что он кривой, как турецкая сабля. Вы выбрали условие для генерации прерывания "вызывать всегда, пока ноль", а потом удивляетесь, что прерывание у вас вызывается снова и снова. Не поняв в чем дело, вы начали валить все шишки на digitalWrite(), которая тут вообще не при делах. А всего и надо было, условием выбрать "смена состояния из единицы в ноль (Falling Edge)":
И благодать бы не замедлила тотчас же снизойти.
Как-то видать не очень вы усвоили, чему вас учили. Вы прибегаете к непонятной практике, из которой извлекаете сомнительные истины. Вместо того, чтобы тратить силы на выражение собственного торжества в комментариях, вы бы лучше на изучение прерываний подналегли.
А всего и надо было, условием выбрать "смена состояния из единицы в ноль (Falling Edge)":
Это уже подлог и манипулирование в чистом виде. Получается что тема сисек до конца и не раскрыта!
А чейта вы уже в понедельник бухать начали?
Так вот ели понакидать из еще пяток в разные места, то станет не 70, а 71 мкс, я уже проверил.
Разница между функцией и прерыванием в том, что функция свободна в использовании R18–R27, R30, R31, а прерывание нет. Поэтому, если вызывать функцию не из loop() вызываемой без параметров, а из функции с пачкой параметров (или заиспользовать все эти регистры в loop() локальными переменными), то перед вызовом функции компилятор вынужден будет сохранять эти регистры, что увеличит затраты на вызов функции.
Если же еще пин порта дергать не из C (чтение из порта, изменение бита, запись в порт), а asm {"sbi/cbi ..."}, то сэкономим еще 2 такта.
В любом случае:
- у AVR нет резервного регистра флагов, который можно использовать в коротких прерываниях, полностью выполняющихся в режиме запрещенных прерываний (+2 такта)
- у AVR нет возможности сохранить регистр флагов в стеке и вынуть его из стек (+6 тактов)
В итоге, выиграть на прерывании возможно столь мало, что, как верно было подмечено выше, "спор не стоит выеденного яйца".
Я тут уже повертел SPI через прерывания и без. Без них существенно быстрее (
Бред голимый! Так вы сейчас договоритесь до сакрального "Прерывания - зло!". И "повертел SPI" можно сразу вертеть. Повертите 1-вирэ или ЮАРТ.
Может быть, всё-таки "тема не стоит выеденного яйца" не потому что у AVR "чего=то там не хватает", а тупо по причине того, что программирование микроконтроллеров В ЦЕЛОМ должно производиться НЕ ТАК, как программирование десктопных приложений и С++ с его выкрутасами в ООП тут "рядом не валялся"?
Замечу, что у ARM ваще нет "вызова функций" и все сохранения в стеке надо делать ручками .. :)
Может быть, всё-таки "тема не стоит выеденного яйца" не потому что у AVR "чего=то там не хватает",
Унылость АВР по любому накладывает свой отпечаток, тут уж никуда не деться.
а тупо по причине того, что программирование микроконтроллеров В ЦЕЛОМ должно производиться НЕ ТАК, как программирование десктопных приложений и С++ с его выкрутасами в ООП тут "рядом не валялся"?
В общем - да.
Замечу, что у ARM ваще нет "вызова функций" и все сохранения в стеке надо делать ручками .. :)
Пошли "откровения", это явно к дождю! ))))))))))
А почему не ножками?
Бред голимый!
Детка, когда у тебя бред, не пиши в форум. Он не для этого предназначен )
И "повертел SPI" можно сразу вертеть. Повертите 1-вирэ или ЮАРТ.
Если я сказал, "повертел", значит повертел, в том числе и USART. На поллинге удалось вписаться в 16 (UBRRnH=UBRRnL=0, Fclk/2) тактов всегда. В самом цикле, после передачи команды и первого байта данных - в 12 тактов. Попробуй впишись на прерываниях, когда бредить перестанешь:
Может я чего не понимаю, но минимальный код прерывания у меня требует 18 тактов:
Если я сказал, "повертел", значит повертел, в том числе и USART. На поллинге удалось вписаться в 16 (UBRRnH=UBRRnL=0, Fclk/2) тактов всегда. В самом цикле, после передачи команды и первого байта данных - в 12 тактов. Попробуй впишись на прерываниях,
ВпИсался? Иди меняй подгузники! Пффффффф! Он на хардварном впИсался! ))))))))))))))))
На задротном СТМ8 115200, 230400 софтварный ЮАРТ легко выгребается. )))))))))))))
Ты софтварный ЮАРТ без прерываний сделай, чтобы хоть что-то ещё могло работать, тот-же 1-вирэ например, и ИР-приём с пульта добавь ещё для верняка. Слабо? )))))))))))
Или знаешь как рулить голыми функциями при асинхронной работе нескольких периферийных устройств? Ну-ну! ))))))))
Попробуй впишись на прерываниях,
ВпИсался? Иди меняй подгузники! Пффффффф! Он на хардварном впИсался! ))))))))))))))))
Я так понял, ты, детка, обосрался и ударился в демагогию? Откуда-то STM выполз. И при чем-то программный SPI на Fclk/2 XCK )))
Или это код на неведомом языке программирования, как ты на ATmega328 сумел сделать прерывание, требующее меньше, чем 18 тактов? ))))
Говорил же, если бред у тебя - приляг, отдохни, но в форум не пиши )))
Я так понял
Да ничего ты не понял, у тебя понималка сломалась. ))))))))))
Нахрен твой SPI, когда он при любом раскладе прерывный, т.е максимум один фиг не выжать. Поллинг отнимает полезное время у МК. И ты совсем не понимаешь для чего нужны прерывания.
Говорил же,
Лучше бы ты жевал. )))))))))))))
отдохни
Я и так отдыхаю, а ты истеришь по незнанию. ))))))))))))))
Нахрен твой SPI, когда он при любом раскладе прерывный, т.е максимум один фиг не выжать.
Ты дурак что ли? Я же код запостил, в котором 8МГц полностью утилизирую без пауз!
Вот он максимум. Смотри выше, неуч )))
Я же код запостил, в котором 8МГц полностью утилизирую без пауз!
Вот он максимум. Смотри выше, неуч )))
Та ты шо! Ты уч? Тогда выложи картинку логического анализатора. )))))))))))))))))))))))
С каких это пор у меги на поллинге максимальная производительность стала, ась? ))))))))))))))))))
А пока залезь под парту и закрой крышку, чтобы все видели что ты в танке. )))))))))))))))))))))
Я долго терпел спор, но все же "не вынесла душа поэта".
Вот программа, практически отвечающая на вопрос "кто сильнее: кит или паровоз?", то есть что быстрее искуственное прерывание или функция.
Запустил Ваш код на нано, с легким допилингом, через прерывания 79мкс, через подпрограмму 75мкс. Подпрограмму кстати оптимизация сожрала, если заставить чтоб была - действительно +1мкс.
Дак и вот программа, с легким допилингом, под нану. На основе вашего же кода.
Гонял на нано. Через прерывания 83мкс, через подпрограмму 89мкс. Таки прерывания немного быстрей, при условии более высокой загрузки.
ПС. практика без понимания происходящего - слепое тыканье в надежде на везение. увы. Да, еще, "мушку спили!" а то слишком борзо вышло, а так тут нельзя, т.к. тут культурные люди друг друга нахер посылают
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции. Вы подогнали решение под требуемый результат. Я сомневаюсь, что существует реальная задача или алгоритм, где это могло бы иметь практическое применение.
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции. Вы подогнали решение под требуемый результат. Я сомневаюсь, что существует реальная задача или алгоритм, где это могло бы иметь практическое применение.
Зря сомниваетесь. Пример - расчетный блок (и вобщем не обязательно расчетный, просто требующий много ресурса) и вывод промежуточных значений. Функции вывода никак не связана с самим расчетом.
Я же код запостил, в котором 8МГц полностью утилизирую без пауз!
Та ты шо! Ты уч? Тогда выложи картинку логического анализатора. )))))))))))))))))))))))
Да, два высших.
А ты, неуч, выложи свой код, в котором с прерываниями быстрее. А потом я уже подумаю, стоит ли вообще с таким балбесом возиться )
Да, два высших.
И логическим анализатором умеешь пользоваться? Ну так и выкладывай картинку своего СПИ, посмеёмся! )))))))))))
И что там у тебя, СТ7735 мелькнуло? Тогда могу заявить, что на СТМ32Ф1хх, при родном СПИ тольков 8 и 16 бит, легко получается СПИ 9 или 18 бит в непрерывном режиме на максимальной скорости и хардварно! ))))))))))
Хотя, если честно, там и 19,20,21,22... получается. А у тебя получается? )))))))))))))))
А по поводу что такое прерывный и непрерывный - тебе на курсы по русскому языку. ))))))))))
Вы сделали ровно то же, что и плутоватый дедушка -- загнали вызов функции внутрь блока обширных вычислений, где вычисляемые этим блоком данные никак не пересекаются с данными, используемыми внутри функции.
А что предлагаете вы? Не вызывать худые функции из жирных? Зашибись решение проблем! )))))))))))))))
Тогда могу заявить, что на СТМ32Ф1хх,
Ты маньяк? У тебя навязчивая идея? При чем тут STM? Ты заголовок темы хоть удосужился прочитать? )))
При чем тут STM? Ты заголовок темы хоть удосужился прочитать? )))
А притом, что ты не знаешь ни Меги, ни СТМ, ты ничего не знаешь! Ты даже не знаешь как работает СПИ, а только пучишь глаза, брызжешь слюной и пальцы раскорячиваешь. Ты ноль!
И где картинка? Или стало стыдно за свои незнания?
Чет я не понял, "вывод промежуточных значенией" и "функция не связана с расчетом", они как соотносятся? Если функция выводит данные полученные в расчетном блоке, то она с ним связана, т.к. оперирует данными расчетного блока. В этом случае и переключения контекста не случится и временных потерь не образуется -- данные общие, своповать никуда ничего не нужно. В вашем же примере присходят события полностью изолированные друг от друа. В этом случае мне сложно придумать обоснование, зачем надо разрывать блок вычислений, чтобы вызвывать левую фукцию в этом месте. Пример страдает нелогичностью действий.
Я предлагаю приводить примеры осмысленных действий, а не абы какой замут, лишь бы результат подогнать.
В вашем же примере присходят события полностью изолированные друг от друа. В этом случае мне сложно придумать обоснование, зачем надо разрывать блок вычислений, чтобы вызвывать левую фукцию в этом месте. Пример страдает нелогичностью действий.
А свитч... не оно? Вычисления свитча могут быть не такими уж простыми, а по результату может вызываться что угодно.
Я предлагаю приводить примеры осмысленных действий, а не абы какой замут, лишь бы результат подогнать.
А где тут замут? Для того чтобы понять что к чему, нужно перебрать все возможные варианты, а не только те, которые кому-то нравятся больше. Ведь в этом эмбедд и заключается, добиться наилучшего результата и безглючной работы.
Тут некоторые верят, что поллингом добиваются максимальной скорости СПИ на меге, но мы то знаем, что это не так. Или тоже не знаем?
ПС. практика без понимания происходящего - слепое тыканье в надежде на везение. увы. Да, еще, "мушку спили!" а то слишком борзо вышло, а так тут нельзя, т.к. тут культурные люди друг друга нахер посылают
Логик! Ну Вы то зачем на меня наезжаете? Я же ни с кем не спорю, как можно заметить.
Нашли способ сделать не +4, а -6 мкс - здорово! Я завтра утром погоняю тоже на нанке, для единообразия.
Я как раз сторонник вот такого нормального диалога, без вентиляторов и лопат с дерьмом.
Я не стал в форуме править, но в программе еще волатили стояли на i,j,cnt. Немного другой код у компилятора должен выходить.
..............
Насчет "слепого тыкания", ну ведь Вы же знаете, что это не про меня! Мне в выше приведенном споре как раз и не нравилось кидание калом друг в друга. Зачем уподобляться? Мы же примерно представляетм уровень друг друга. И спорщики выше - тоже представляют. Можно же точку зрения высказывать и аргументы?
Я нахер наглых новичков-неучей люблю посылать, которые считают, что тут им все должны быстро объяснить "из чего, на самом деле, тетка сделана". Но между специалистами ругань - жутко раздражает своей бессмысленностью.
Знаете, типа того: "Я весь даташит наизусть знаю!", "А я два, нет! - ТРИ даташита наизусть помню, и wiring вслепую перепишу!".
Вот это не смешно?
Свитч -- не оно. Блок свича будет выполняться до вызова целиком, а не пол-блока до вызова, пол-блока после. Точно так же можно перенести вызов функции в позицию после вычислительного блока из примера выше и никакого пенальти по времени выполнения уже не будет и в помине.
Вот и перебирайте, если заняться нечем. Изучайте примеры кода, не выполняющего осмысленных действий. Учредите премию за сомнительные достижения в эмбеде. В общем, есть где блеснуть таким образом.
Вы продолжаете настаивать, что комментарии в коде были остроумными?
Вот и перебирайте, если заняться нечем. Изучайте примеры кода, не выполняющего осмысленных действий. Учредите премию за сомнительные достижения в эмбеде. В общем, есть где блеснуть таким образом.
Мне и даром не надо. Я уже давно знаю что лучше, как и на каком камне.
Вы либо однотипные решения тиражируете, либо врете насчет "лучше".
Да вы уж определитесь как нибудь, а то всё это как-то загадочно на уровне кофейной гущи звучит.
Ну и никто вам не мешает попробовать что-то однотипное на ПИК16/18/24, на меге и на СТМ, для общего развития и понимания что к чему.
И где картинка?
Я же сказал четко: http://arduino.ru/forum/apparatnye-voprosy/nekotorye-voprosy-po-preryvan...
А пока ты только словоблудием занимаешься, на фиг ты мне, балбес, нужен?
Когда весь проект заработает, выложу в гитхаб. В том числе и с видео.
Когда весь проект заработает
А он ещё и не работает? Ну, удачи! ))))))))))
Звучит столь же конкретно, как ваше отправное "Я уже давно знаю что лучше, как и на каком камне."
За исключением пиков (которые лично мне нафиг не сдались) вы абсолютно в курсе, что я сейчас именно тем и занимаюсь, что в рамках одного проекта пилю устройства на меге, стм8 и стм32. Вы даже сюда таскали выжимки из моих сообщений с той ветки, где я пишу о том, что у меня получается. Но вдруг в какой-то момент вас разбивает полнейшая амнезия, что вы начинаете пафосно мне советовать чего-то там попробвать на меге и стм, чтобы сравнить. Допились таки? Белочка пожаловала?
Звучит столь же конкретно, как ваше отправное "Я уже давно знаю что лучше, как и на каком камне."
А вас это сильно смущает, раздражает или злит? И что вас больше злит, мои знания или ваши незнания?
вы абсолютно в курсе, что я сейчас именно тем и занимаюсь, что в рамках одного проекта пилю устройства на меге, стм8 и стм32. Вы даже сюда таскали выжимки из моих сообщений с той ветки, где я пишу о том, что у меня получается. Но вдруг в какой-то момент вас разбивает полнейшая амнезия, что вы начинаете пафосно мне советовать чего-то там попробвать на меге и стм, чтобы сравнить.
Что, уже сравнили? Ну и каковы результаты? Или не можете оторваться от сравнения? ))))))))))))))))))
Если до сих пор сравниваете, значит что-то у вас плохо с пониманием. Иначе сравнение давно бы уже сменилось выбором.
Только от вас и узнаю, что меня, оказывается, что-то злит. Насчет ваших знаний и вовсе судить не могу, т.к. вы их никому не демонстрировали.
О каком еще сравнении речь? Вообще-то я вам уже рассказывал, где и по какой причине я использовал тот или иной МК. Вы мне на это, помнится ответили, что везде надо было применять один и тот же. На мои возражения, что тогда это будет иметь последствия в виде кучи лишнего гемора, вы не нашли ничего лучшего, как посоветовать загеморроиться по полной, т.к. по вашим словам, если я не сделаю этого сейчас, то страшный геммор настигнет меня когда-нибудь потом. Мало того, что такие предсказания будущего, мягко говоря, не убедительны, так и убийственный совет срочно кинуться прошибать лбом стены, сильно страдает от повышенной дозы идиотизма. Я ничего не ведаю про ваши знания, но вот советы от вас сыплются просто никуда не годные, что, как-бы, навевает.
О каком еще сравнении речь? Вообще-то я вам уже рассказывал, где и по какой причине я использовал тот или иной МК. Вы мне на это, помнится ответили, что везде надо было применять один и тот же. На мои возражения, что тогда это будет иметь последствия в виде кучи лишнего гемора, вы не нашли ничего лучшего, как посоветовать загеморроиться по полной, т.к. по вашим словам, если я не сделаю этого сейчас, то страшный геммор настигнет меня когда-нибудь потом.
И что я не так сказал? Вам нравится идти своим путём, наступая на грабли и набивая шишки? Это ваш выбор, вам и разргебать его последствия.
Мало того, что такие предсказания будущего, мягко говоря, не убедительны, так и убийственный совет срочно кинуться прошибать лбом стены, сильно страдает от повышенной дозы идиотизма. Я ничего не ведаю про ваши знания, но вот советы от вас сыплются просто никуда не годные, что, как-бы, навевает.
Я не проповедник, чтобы убеждать. Примеры были приведены, сколько народа свалило на СТМ после таких советов я и говорить не буду. Но это всё не для вас. У вас привычка искать причины неудач на стороне, а не в самом себе. Блин, ну я же не доктор, чтобы лечить ваши комплексы.
О каких граблях и шишках спич, уважаемый? Можно подумать, что вы лучше меня знаете, что тут у меня творится. На той ветке форума, которую вы любите посещать инкогнито, можно проследить, сколько времени прошло с момента, как я задумал, а потом физически организовал проброс данных с беспроводного сенсора до серверов IoT. Изготовление устройств на атмеге и стм8 заняло минимум времени. С тех пор они так и работают 24/7 и о каких граблях и шишках вы тут несете, понятия не имею.
Ну красавец! Не моргнув глазом и не сходя с места, изобрел мои неудачи, плюс наградил еще дурной привычкой. Фнатастику бы лучше писали с такими-то наклонностями, а не по форумам ошивались.
К слову сказать, больше всего времни заняло не написание специфичного кода для трех разных МК, а раскуривание NRF24L01. И если просто запустить пару приемник-передатчик -- это плевое дело, то вникнуть, что еще может этот чип и как этого от него добиться, заняло не одну неделю. Радио-чип, безусловно, очень красивый, если наблюдать его внутреннее устройство и понимать, как все это работает.