SortoVaritu 0 4 ноября, 2010 Опубликовано 4 ноября, 2010 · Жалоба Использую IAR 5.10 Не работает функция sprintf при таком коде char L[10] sprintf(L,"СПРИНТФ"); в L записывается какая то ерунда. Причем в дебугере все нормально, а вот после прошивки в железо к сожалению результата нет. Изучал форумы. Стэки закрутил побольше - все равно ничего не выходит. В чем может быть проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 4 ноября, 2010 Опубликовано 4 ноября, 2010 · Жалоба Если у Вас установлена опция располагать стринги во флеш, то Вам больше подойдёт функция sprintf_P Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SortoVaritu 0 4 ноября, 2010 Опубликовано 4 ноября, 2010 · Жалоба Если у Вас установлена опция располагать стринги во флеш, то Вам больше подойдёт функция sprintf_P а что это за опция и где она? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SortoVaritu 0 4 ноября, 2010 Опубликовано 4 ноября, 2010 · Жалоба а что это за опция и где она? Все... Я уже нашел Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Добрый день. Я сейчас впервые попробовал использовать функцию sprintf (); Текст самый простой: char L[10]; sprintf (L, "787878"); При компиляции IAR выдаёт: Warning[w6]: Type conflict for external/entry "sprintf", in module main against external/entry in module ?sprintf; types have different type attributes Подскажите пожалуйста, что я делаю не правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Warning[w6]: Type conflict for external/entry "sprintf", in module main against external/entry in module ?sprintf; types have different type attributesЗабыли #include <stdio.h> Перед этим при компиляции он должен был ругаться что function declared implicitly. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Забыли #include <stdio.h> Перед этим при компиляции он должен был ругаться что function declared implicitly. Спасибо за ответ. Но, #include <stdio.h> был подключен. Причина в чём то другом, а в чём - не знаю. На всякий случай подключил библиотеку FullDLIB, опция Lardge. Увеличил CSTACK, и RSTACK. Но результат такой же. Подскажите пожалуйста, что не так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Warning[w6]: Type conflict for external/entry "sprintf", in module main against external/entry in module ?sprintf; types have different type attributes Очевидно, что атрибуты типов данных разные. sprintf ожидает указатель на данные, размещённые в ОЗУ, а ему скорее всего передаётся указатель на flash если в настройках проекта установлена опция держать строки во flash. Читайте тему с самого начала. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Очевидно, что атрибуты типов данных разные. sprintf ожидает указатель на данные, размещённые в ОЗУ, а ему скорее всего передаётся указатель на flash если в настройках проекта установлена опция держать строки во flash. Читайте тему с самого начала.Тогда бы компилятор ругался на несоответствие параметров. А это ругань линкера на то, что при компиляции был указан один тип параметров, а функция в библиотеке была скомпилирована с другими типами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Спасибо за ответы. В настройках проэкта установлены 2 галочки: 1. Place string literals constants in initialized RAM. 2. Place aggregate initializers in flash memory. Спасибо за ответы. Сергей, Вы правы, ругается действительно линкер. Может эта информация что нибудь подскажет. Когда первую галочку снял (1. Place string literals constants in initialized RAM.), то ликер выдал Error: Fatal Error[e72]: Segment NEAR_C must be defined in a segment definition option (-Z, -b or -P) Error while running Linker Да, галочки находятся в Project \ Options \ C/C++ Compiler \ Code Правильно ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 140 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Может эта информация что нибудь подскажет. Когда первую галочку снял (1. Place string literals constants in initialized RAM.), то ликер выдал Error: Fatal Error[e72]: Segment NEAR_C must be defined in a segment definition option (-Z, -b or -P) Error while running Linker А вы используете свой скрипт линкера или штатный? Давно с ИАРом не работал, подзабыл кое-что. Помню, что у меня эта галочка была недоступна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Fatal Error[e72]: Segment NEAR_C must be defined in a segment definition option (-Z, -b or -P) Модель памяти какая в настройках задана? Если tiny, то сегмента NEAR_C в ней не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikkolaj 0 16 ноября, 2010 Опубликовано 16 ноября, 2010 · Жалоба Спасибо за ответы. Модель памяти Small. Скрипт линкера штатный. Версия IAR 5.50. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться