ВходНаше всё
Теги
codebook
PARTS
Поиск
Опросы
Закон
Воскресенье
30 апреля
О смысле всего сущего0xFF Средства и методы разработки Мобильная и беспроводная связь Блошиный рынокОбъявления
МикроконтроллерыPLD, FPGA, DSP AVRPICARM, RISC-VТехнологии Кибернетика, автоматика, протоколы Схемы, платы, компоненты
450542
sierra (04.10.2013 10:23, просмотров: 7728)
Есть ли в среде IAR функции перевода из десятичного числа в строку и наоборот? При написании Hex2Dec или Dec2Hex пишет что функция не определена. Где можно найти исходный код для этих функций?
Ответить
Я закодировал свой проект на C на компьютере с Windows в программном обеспечении IAR Embedded Workbench IDE
.
printf
в моем коде. Но все дело в том, что проект рассчитан на микроконтроллер AT91SAM7X256. Я успешно создал свое приложение для работы на оперативной памяти микроконтроллера, и приложение было успешно загружено. Но 9Функция 0003 printf направляется на порт USART контроллера (я могу только предположить), и поэтому я хотел бы перенаправить printf
для отображения текста на моем терминале ввода-вывода. Кто-нибудь знает, как я могу это сделать?1
Я использую версии процессоров ARM, AVR32 и MSP430 набора инструментов IAR. В каждом из них вы должны реализовать свою собственную низкоуровневую функциональность для обработки потоков stdin и stdout. В руководстве по компилятору ARM есть раздел «Стандартные потоки для ввода и вывода», в котором говорится, что вам нужно написать собственную версию функции __write(), и приводится пример версии, в которой данные записываются на светодиодный дисплей с отображением памяти.
Зная IAR, я ожидаю, что у них будет аналогичный пример для вашей комбинации процессор/тулчейн.
6
Я не знаю, почему ваш printf перенаправляется, но чтобы сделать то, что вы хотите, я сделал следующее: Сначала покажите окно консоли. (во время отладки перейдите в меню View-> Terminal I/O затем остановив приложение, перейдите в Project->Options и в Linker->Library установите флажок Включить поддержку отладки C-SPY
Имейте в виду, что это делает работу программы значительно медленнее, чем должна быть. Закомментируйте все printfs позже, когда закончите отладку
Стандартный ответ — выбрать «Semihosted» и «через полухостинг» (или через SWO — но я использовал другой вариант). И «буферизованный вывод терминала» для скорости в библиотеке варианты 1.
Тем не менее, я ковыряюсь здесь, потому что у меня есть демо-программа от ST, которая не выводит на консоль печать, и я не знаю, почему — есть много приложений, которые работают. Так что, если кто-то может вспомнить какую-то деталь, которая не входит в стандартную информацию, не стесняйтесь сказать что-нибудь…
все, что вам нужно сделать, это #include
При входе в режим отладки вы можете открыть окно консоли отладки, выбрав View -> Terminal I/O в верхнем меню. Вы, вероятно, заметите, что если вы попытаетесь напечатать слишком много текста, это приведет к некоторой задержке вывода. Но в любом случае это может быть удобным инструментом для отладки вашего приложения.
(Для любопытных, вы можете увидеть в дизассемблере, что функции putchar() / getchar(), связанные с кодом при использовании эмуляции ввода-вывода, являются просто фиктивными функциями инструкций NOP. Отладчик C-SPY установит аппаратную точку останова в этой функции, и всякий раз, когда эта точка останова будет достигнута, он будет считывать регистр для чтения/записи символа. Накладные расходы связи вызывают небольшую задержку для каждого символа. Побочным эффектом использования эмуляции ввода-вывода является то, что отладчик резервирует по одной аппаратной точке останова для каждой из этих двух функций (если вы их используете), поэтому вы получите меньше аппаратных точек останова, доступных для использования при отладке других приложений.)
Дополнительную информацию о модулях эмуляции ввода/вывода можно найти в руководстве пользователя IAR: Справка -> Руководство пользователя 8051 Embedded Workbench.
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Электронная почта
Обязательно, но не отображается
Электронная почта
Требуется, но не отображается
xcl 파일을 수정해야한다. .
atmega128 기준..
/* — lnkm128.xcl —
*
* Командный файл XLINK для C-компилятора ICCAVR с параметрами —cpu=m128, -ms
* . Сегменты определены для ATmega128 без внешней памяти
* . Также можно «добавить» внешнюю SRAM, EPROM и EEPROM.
*
* Использование: xlink your_file(s) -f lnkm128
*
* Версия файла: $Revision: 1.9 $
*/
/*================== ===================================*/
/*
* Константы, используемые ниже,
* Не изменять эти строки,
* если не указано иное
*/
/* Сегменты кода (flash) */
-D_..X_INTVEC_SIZE=8C /* 4 байта * 35 векторов */
-D_ ..X_FLASH_TEND=FF /* Конец маленькой флэш-памяти */
-D_..X_FLASH_NEND=FFFF /* Конец ближней флэш-памяти */
-D_..X_FLASH_END=1FFFF /* Конец флэш-памяти */
/* Внутренняя память данных */
/*
* Измените две строки ниже на 60(BASE) и FF(TEND)
* если вы работаете в «режиме mega103»
*/
-D_. .X_SRAM_BASE=100 /* Начало оперативной памяти */
-D_..X_SRAM_TEND=100 /* Конец маленькой оперативной памяти */
-D_..X_SRAM_END=10FF /* Конец оперативной памяти memory */
/* Внутренняя EEPROM */
-D_..X_EEPROM_END=FFF /* Конец памяти eeprom */
/*===================== ===============================*/
/*
* Измените строки ниже, чтобы изменить размер RSTACK, CSTACK и HEAP
* сегментов. Они должны быть точно настроены в соответствии с вашим конкретным приложением.
* Префикс ‘_..X_’ используется C-SPY как указание на то, что
* метка не должна отображаться в окне разборки.
*/
-D_..X_CSTACK_SIZE=200 /* 512 байт для автоматических переменных и сохраненных регистров. */
-D_..X_RSTACK_SIZE=40 /* 64 байта для адресов возврата, что эквивалентно 32 */
/* уровни вызовов, включая прерывания. */
-D_..X_HEAP_SIZE=100 /* 256 байт кучи. */
-D_..X_NEAR_HEAP_SIZE=100 /* 256 байт кучи. */
/*
* Измените эти строки, если к системе подключена внешняя SRAM.
*
* Примечание. Не забудьте включить внешние шины данных и адреса в
* __low_level_init, если используется внешняя память.
*/
-D_..X_EXT_SRAM_BASE=_..X_SRAM_BASE
-D_..X_EXT_SRAM_END=_..X_SRAM_END
/*
* Измените эти строки, если к системе подключено внешнее СППЗУ.
*
* Примечание. Не забудьте включить внешние шины данных и адреса в
* __low_level_init, если используется внешняя память.
*/
-D_..X_EXT_EPROM_BASE=_..X_SRAM_BASE
-D_..X_EXT_EPROM_END=_..X_SRAM_END
/*
* Измените эти строки, если к системе подключена внешняя EEPROM.
*
* Примечание. Не забудьте включить внешние шины данных и адреса в
* __low_level_init, если используется внешняя память.
*/
-D_..X_EXT_EEPROM_BASE=_..X_SRAM_BASE
-D_..X_EXT_EEPROM_END=_..X_SRAM_END
/*
* Следующие сегменты расположены во внутренней памяти
* ATmega128. Не изменяйте эти строки.
*/
/* Определить ЦП */
-ca90
/* Память кода */
-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE-1)
/* Заполнить неиспользуемые векторы прерываний RETI */
-h2895
-h(CODE)0-_..X_INTVEC_SIZE
-Z(CODE)TINY_F=_..X_INTVEC_SIZE-_..X_FLASH_TEND
-Z(CODE)NEAR_F,SWITCH,DIFUNCT=_.. X_INTVEC_SIZE-_..X_FLASH_NEND
-Z(CODE)CODE=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(FARCODE)FAR_F=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(CODE)HUGE_F,INITTAB=_..X_INTVEC_SIZE-_ ..X_FLASH_END
-Z(CODE)TINY_ID,NEAR_ID=_..X_INTVEC_SIZE-_..X_FLASH_END
-Z(CODE)CHECKSUM#_..X_FLASH_END
/* Внутренняя память данных */
-Z(DATA)TINY_I ,TINY_Z,TINY_N=_..X_SRAM_BASE-_..X_SRAM_TEND
-Z(DATA)NEAR_I,NEAR_Z=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
/*
* Если доступна внешняя SRAM, там можно размещать стеки.
* Однако внешняя память работает медленнее внутренней, поэтому перенос
* стеков во внешнюю память снизит производительность системы.
*/
-Z(DATA)RSTACK+_..X_RSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */
-Z(DATA)CSTACK+_.. X_CSTACK_SIZE=_..X_SRAM_BASE-_..X_SRAM_END /* ,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END */
/*
* Если доступна внешняя SRAM, было бы неплохо переместить туда сегмент кучи
* , то есть удалить диапазон _..X_SRAM_BASE-_..X_SRAM_END.
*/
-Z(DATA)HEAP+_..X_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)IOSTREAM_N#_..X_SRAM_BASE-_. .X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
-Z(DATA)NEAR_HEAP+_..X_NEAR_HEAP_SIZE=_..X_SRAM_BASE-_..X_SRAM_END,_..X_EXT_SRAM_BASE-_..X_EXT_SRAM_END
/* Внутренняя память EEPROM память */
-Z(XDATA)EEPROM_I,EEPROM_N=0-_..X_EEPROM_END
/*
* Следующие определения сегментов используются только в том случае, если внешняя память
* подключена к контроллеру AVR.
*/
/*Внешний eprom*/
-z (const) neal_c = _ .