Не работает часть кода, после включения ардуины
- Войдите на сайт для отправки комментариев
Сб, 07/06/2014 - 13:57
Здравствуйте! Столкнулся вот с таким поведением оригинальной arduino uno - есть некий код, сразу после заливки все работает. Отключаю питание, включаю - часть кода не работает. Жму на кнопку ресет - все работает. Что это может быть?
Может быть код так написан....
1.сначало обьявление переменных - читай нарубить память на кусочки
2.потом переферию проинициализировать - читай всем микрушкам по 1 аль 0 фигнюшкам
3.потом только логику придумать - читай тех задание почитать
4.потом разбить на одинаковые подрограмки - читай subroting routing void
5.потома корректно выийти их всего этого - читай exit(0); halt();
6.а различать по запрещенным для остального спец символам {} ; # //
7. И писать завещаю вам кодом не более 25 строк на одну страницу, потому как понять более длинные писания за раз немыслимо.
Это я так доктора Абеля основы програмирорвания на ASSEMLER процитироваль с русским сленгом.
А теперь вернемся к нашим баранам.
1.
// обьявленние переменных постоянных косвенных прямых пьяных----------------
int xrenotenNogaPin2 = 2;
2.
// а не встряхнуть ли мне всю хренотень так чтобы после встрАхА все стало как я хочу --------------------
void setup(){
digitalWrite( AneZasunutLiMneEdinicu, HIGH);
}
3.
// ну пошла сдуьбинушка по кочкам ================================
void loop(){
бла-бла-бла
}
4.
// я ЧЁ Дебил адну и ту же хрень постоянно переписывать
void MoyaMnogorazovayaXren(vasya, pуtya){
// и пошла многоразовая хрень
}
5.
// че я Дебил тут что-то писать Atmel RESET к каждому чипу припаивает
Все курс программирования логических устройств закончен.
7. пункт основное программерское стадо мало выполняет и потому косяки у стада наровном месте возникают
А Абель говорил!
Сдача курсовой в понедельник.
А у вас молодой человек перепутки между инициализациями и логикой.
Cмотрите в стиле Arduino то есть упрощенный Керниган и Ричи С С+ С++ С# еще какойнибудь обиблиотеченный С символы разделения {} ;
Существуют устройства которые при таких ошибках не то что сами умрут но и убьт человека!!! а это уже статья 105 УК РСФСР
Например электрокардиостимулятор.
Здравствуйте! Столкнулся вот с таким поведением оригинальной arduino uno - есть некий код, сразу после заливки все работает. Отключаю питание, включаю - часть кода не работает. Жму на кнопку ресет - все работает. Что это может быть?
Adrunio здесь не причем, эти косяки редки, потому что опасты, поэтому не известны.
Так что вы батенька ходите под статьей предумышленное убийство.
Поясняю
Типовой случай:
батарейка кончилась и и после замены пациент умер,
а ведь жил с кардиостимуляторм 1.5 года( типовое время работы типовй батарейки).
Ведь в операционной хирург как вставил вы ожили и жили 1.5 года до перезагрузки.
Спасибо большое за развернутый ответ. Пойду искать ошибки в коде. С моими знаниями, меня к кардиостимуляторам подпускать нельзя :о) Я пока на пивоварнях тренируюсь :о)
Спасибо большое за развернутый ответ. Пойду искать ошибки в коде. С моими знаниями, меня к кардиостимуляторам подпускать нельзя :о) Я пока на пивоварнях тренируюсь :о)
ну хоть только пыво сбежит :)
не, пиво не сбежит :о)
А вот в коде я ошибок не нашел. Это не значит что их нет, просто я их не вижу :о(
До основного цикла все выглядит так:
вродо все так, как завещают старшие товарищи. Или нет?
если не вникать в суть а глянуть на стил
у тебя попрограмма в инициализации
это как?
память еще не нарубили а уже давай ей маслать
компилятор проверять может только синтаксис
странно много в инициализации
неужели так лсд надо готовить
#define это только вынос имен для удобства настройки
он вообще может не нужен быть
а он в середине инициализации
это как
начали с чем-то маслать а потом имя подменили и все потеряли
это я не вникал еще в логику
только стиль
а где инициализация в стиле ардуин
пустой хотя бы
компилятор все равно что-то вставит в живую прошивку
а если там фигня окажется с ногами
а ткните носом в подпрограмму в инициализации, пожалуйста.
Что такое "не работает часть кода"? Какая часть? Как именно не работает?
Почему вдруг переменная знаковая:
long
millis_In_Minute = 60000; ?
Номера пинов либо через #define определяются, либо через const byte (или const uint8_t) вполне достаточно, посмотрите хотя бы параметры вызова для pinMode "void pinMode(uint8_t pin, uint8_t mode)", здесь int не нужен.
Думаете по части скетча что то можно сказать? Если скетч большой, можно его под кат поместить.
...
о вот тебе логику высмотрит
Ох, боюсь что за такой код, меня не только помидорами закидают, но и руки оторвут. Заранее обещаю что исправлюсь :о)
остальная часть кода выглядит так:
"не работает часть кода" - это не включается ТЭН. В строке 173 он включается только после перезагрузки.
а тут "long millis_In_Minute = 60000;" вы имеете ввиду забытую буковку "L"?
а где инициализация в стиле ардуин
в коде выше она есть
Скетч нужно выкладывать полностью, а не кусочками, потому что.
Что я могу сказать:
1. Переменные объявляются как попало. С одним и тем же именем переменная объявляется несколько раз. Это может привести к проблемам и путанице. Хорошо, если Вы используете несколько локальных переменных с именем Whole, то уберите такую глобальную переменную, например.
2. Глобальная переменная Tc_100 используется как в основном цикле, так и в readTemp, это называется получить в лоб из-за угла. Если это ожидаемо, то так делать нельзя.
3. Есть куча переменных, которые не инициализированы. Нужно проверить все, не используются ли они неинициализированными, поскольку это первый звоночек к разности работы программы при включении и при ресете.
4. Про типы я уже писал, не нужно беспорядочно использовать типы переменных. А те, что не меняются, делать константами или определять через #define.
5. Чтобы найти причину неработы, необходимо сделать вставки отладочного вывода переменных и места, где сейчас программа выполняется, например в Serial, тогда будет понятно, почему работает при сбросе, но не работает при включении питания. И это главное, что я могу сказать.
6. Логика наворочена дай Боже, потому копаться не хочется, да и датчиков таких у меня нет, чтобы проверить.
7. По какой причине millis_In_Minute знаковая переменная? Почему Вы сравниваете беззнаковые величины со знаковыми? Странно что не работет? Это одна из возможных причин. Не обязательно, но в дальнейшем можно получить море проблем. Тем более про "проблему" переполнения millis() уже на форуме разжОвано неоднократно.
спасибо большое, буду исправлять.
пункт 7-ой доктора Абеля
и писать завещаю вам не более страницы за раз
подпрограммы не вижу
осилисть столько кода не могу
вы когда с начала до конца выверять дойдете забудете что в начале было
спорим на 100$
потому как я не могу осилить столько букАв
но с ходу вижу у вас 4 логических подобных узла
внутри тоже думаю однообразия хватает которое замечательно в подпрограммы
щас попробую тут пример кода поискать
На счет выделения кусков в отдельные подпрограммы согласен, даже если они не одинаковые, зато если назвать их правильно, будет более читабельная программа.