реклама на сайте
подробности

 
 
> Отключение printf, Версия release
pokk
сообщение Oct 29 2015, 05:18
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Добрый день, подскажите как в IAR настроить версию release что бы она игнорировала функции printf?

PS: Такое не предлагать, хочу натыкать printf в многих функциях и не хочу что бы оно мешало.
Код
#ifndef NODEBUG
printf(...);
#endif


Сообщение отредактировал pokk - Oct 29 2015, 05:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
pokk
сообщение Oct 29 2015, 07:36
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 91
Регистрация: 3-07-11
Пользователь №: 66 028



Цитата(Integro @ Oct 29 2015, 11:13) *
...
после вышеописанного, нужно в параметрах конфигурации для RELESE добавить дефайн NODEBUG.
...

С этим как раз вопросов не было =)
Вот по коду ниже не понятно что за IDEF и что будет при #if 0
Код
#if 0
IDEF int PRINTF(char* fmt,...)
{
return 0;
}
#else
#define PRINTF printf
#endif


Цитата(scifi @ Oct 29 2015, 11:22) *
Кстати, по феншую надо писать NDEBUG. Так даже в стандарте написано.

Ага именно такой define сразу там стоял.

Сейчас разбираюсь с ошибкой:
Код
Error[Li005]: no definition for "__write" [referenced from putchar.o(dl7M_tln.a)]

Возникающей при выставление:
General Options -> Library Configuration -> Library low-level interface implementation ->None
Вместо
General Options -> Library Configuration -> Library low-level interface implementation -> stdout/stderr -> Via semihosting


Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 29 2015, 08:07
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(pokk @ Oct 29 2015, 09:36) *
Сейчас разбираюсь с ошибкой:
Код
Error[Li005]: no definition for "__write" [referenced from putchar.o(dl7M_tln.a)]

Возникающей при выставление:
General Options -> Library Configuration -> Library low-level interface implementation ->None
Вместо
General Options -> Library Configuration -> Library low-level interface implementation -> stdout/stderr -> Via semihosting


Это значит, что применяете printf, а для потока STDOUT не назначили канал вывода.
А назначается он как раз через собственную реализацию функции __write.
Когда был включен semihosting, то реализация __write подставлялась из библиотек семихостинга, а теперь ее вам надо самому писать.

Либо как обычно переопределить дефайном типа так : #define printf my_printf
И написать свою функцию my_printf . Это будет легче и безопасней чем делать tailoring (адаптацию __write и еще кучи низкоуровневых функций) библиотек C на вашу платформу.
Хотя например в Keil выбрали путь адаптации и даже показывают как ее приспособить к файловой системе в RTOS RTX.
Но Keil-овский tailoring не подходит к IAR. Хотя в IAR есть пустые шаблоны для реализации адаптации, но надо помнить что между printf и __write лежит неизвестный код потребляющий неизвестно сколько стека и других ресурсов.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 06:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016