Конфликт delay и printf
- Войдите на сайт для отправки комментариев
Вс, 11/08/2013 - 03:10
Пишу программу под pcDuino. Если написать код, состоящий из одной только команды printf (текст) то в консоли спокойно выводится текст, но стоит добавить в программу delay (), текст выводиться в консоль тут же перестает, при этом программа работает, "диодики мигают" с нужной задержкой..
Что такое может быть?
Глючный код опубликуйте, потому как у народа всё работает.
http://playground.arduino.cc/Main/Printf
А вы ссылочку, которую вам дал Калапуций внимательно читали?
The avr-gcc C library, avr-libc, provides the printf() family of functions. You can use them in Arduino sketches after some preparation
И ниже дан рецепт что именно нужно сделать, что-бы printf Нормально работал в ардуино.
Если, конечно вас не смущает "printf() makes your executable object ~1000 bytes larger"
У меня слишком начальный уровень знания C++, по этому я не смог, из данной ссылки, понять как именно влияет delay на printf, и почему без delay printf работает.
Тот же код Клапуция работает только если удалить delay();
Напомню, что это не arduino, а pcDuino. Если не сложно, объясните простыми словами..
printf() makes your executable object ~1000 bytes larger - что это такое? у меня а пкдуино доступно более 180Мб памяти.
>и почему без delay printf работает
У меня - не работает (если не сделать описанных в ссылке танцев) . Так что у вас "работает" скорее "чудом" (случайное стечение обстоятельств, состояния памяти и проч). И "любой чих" - поломает эту чудо. Что и сделал delay(). Да вообще что угодно может привести к этому (размер скетча, количество переменных и т.д. и т.п.).
Так что не тратье время на попытки понять "почему delay() ломает", лучше займитесь "как правильно пользоватся printf ".
В ссылке - есть все необходимое. И как сам printf заставить, и как "обходится без него" (первый пример). Можно еще воспользоватся функцией sprintf для формирование строки в какую-нибудь переменную, скажем str, а потом делать ее вывод с помощью Serial.print
Только.... учитывайте что у ардуины, для экономии места printf/sprintf - кастрированные. Далеко не все "фичи" форматирования поддерживают. В частности строки и целые числа вывести - пожалуста. А вот для float - увидите знаки вопроса вместо цифр :(
>Напомню, что это не arduino, а pcDuino
Другой процессор, другая архитектура... У вас есть два варианта: либо надеятся что они все библиотеки "портировали" в виде наиболее близком к дуине, либо у них на форумах спрашивать "как правильно пользоватся printf" (как настроить стандартный stdout)
Вообщем возмите пример по ссылке Калапуция, запустите его. Там delay() уже есть. Если заработает - вам повезло, нет - ищите аналогичный пример-статью для вашей платы/камня.
Вообщем возмите пример по ссылке Калапуция, запустите его. Там delay() уже есть. Если заработает - вам повезло, нет - ищите аналогичный пример-статью для вашей платы/камня.
Первым делом проверил, никакого эффекта. А доля pcDuino и соответсвенно форумов под него, не смотря на смешную стоимость (в сравнении с raspberry pi + arduino + доставка), просто никакая.. Ладно, может где и отыщется ответ.
> Ладно, может где и отыщется ответ.
Все это конечно мое глубокое IMHO, но в микроконтроллерах, когда у нас нет оболочки в ввиде OS, само понятие "стандартный поток вывода" - очень притянуто за уши. Можно принять что "нет у нас stdout" и все. Следовательно и printf у нас всякие - вне закона.
Можно конечно, как по ссылке Калапуция, извратится и пинками заставить его работать... но это немного противоестественно. Попытки перенести привычки "большого брата" на микроконтроллер.
Более "идеологично", в данном случае, было-бы
1. Выделить переменную буфер - под формирование строк
2. Заполнить ее с помощью sprintf
3. Отправить ее "штатным" средствами куда нам нужно Serial.print, LCD.print, SD.write и т.п.
А по поводу pcDuino....
Ну собственно, "при такой моще". Там и языки нужно использовать соответсвующие. Зачем жаться в обрезанные языковые варианты ардуины. У ардуины - аскетичность средств понятна. Ресурсов мало.
А если ваша плата позволяет полноценную ось пустить, то.... что же вы мучаете себя как при царском режиме? :) Питоны, Java, PHP, возможно .NET, полноценная C++ - все это должно быть у вас доступно :)
Хотя... если честно я сам наступил в эти грабли :) Fez Panda II взял. Уже второй год пылится. И язык мощней (C#), и ресурсов валом... и средства разработки удобней (есть отладчик и т.п.). Только: библиотек и сообщества - намного меньше (хотя есть). И главное - так и не придумал "а зачем эта моща?" :)
Для чего-то "легкого" типа "пощелкать релешками/диодами/прочитать датчик" - дуины с головой хватает. Воротить крутое UI с тач.экранами? Так планшет китаезный дешевле на андроиде. Какие-то нейронные сети-распознавание-обработка видео? Так в любом случае комп понадобится.
Вообщем ниша DUE и тому подобных плат - лично мне совершенно не понятна.