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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Помогите разобратся с ICC AVR 7, В 6й версии работало, в 7й - ошибка
Pyku_He_oTTyda
сообщение Dec 22 2005, 05:51
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Осваиваю Си по примерам с [banned], пока работал на шестой версии ICC, все было хорошо.
Вчера поставил седьмую версию, и она стала ругатся на этот фрагмент:

putchar('R');
putchar('x');

говорит: !ERROR file 'work03.0':undefined symbol '_putchar'

как эта процедура прописывается в седьмой версии? Тыкните носом!

На всякий случай прикладываю текст программы
Прикрепленные файлы
Прикрепленный файл  work.txt ( 1.38 килобайт ) Кол-во скачиваний: 64
 


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Dec 22 2005, 06:36
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Pyku_He_oTTyda @ Dec 22 2005, 13:51) *
Осваиваю Си по примерам с [banned], пока работал на шестой версии ICC, все было хорошо.
Вчера поставил седьмую версию, и она стала ругатся на этот фрагмент:

putchar('R');
putchar('x');

говорит: !ERROR file 'work03.0':undefined symbol '_putchar'

как эта процедура прописывается в седьмой версии? Тыкните носом!

На всякий случай прикладываю текст программы


Гм... если мне не изменяет память, то функция putchar() должна быть определена либо в stdio.h, либо в conio.h. По крайней мере в досовском компиляторе я один из этих модулей подключал.

Попробуйте написать так:
#include <stdio.h>
в начале файла, рядом с подключениями других хедеров...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Dec 22 2005, 08:27
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Простите за offtop

Но если это ваши первые пробы програмирования для атмел то рекомендовал бы вам сразу разбиратся с IAR
Он более функционален.
Сам проходил через ICC.
Программа компилировавшаяся на ICC в 80% кристала в IAR занимает 60 % без оптимизации а возможностей у IAR намного больше. Правда нет мастера настроек так ничто не мешает настройки в ICC а программу в IAR
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Dec 22 2005, 08:42
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Serega Doc , я вас поддерживаю, но к сожалению 100 мегов выкачать я не могуsad.gif, так что начал с доступного


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Dec 22 2005, 10:35
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Цитата
Попробуйте написать так:
#include <stdio.h>

не помогло


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Dec 22 2005, 13:34
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



А радио базара у вас в городе что нет? Болванка гривен 15 - 20 может стоить зато руки просто развязаны
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Dec 22 2005, 13:49
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



К сожалению... Возят в основном софт - системы, драйвера и т.д., ну и игры


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
_artem_
сообщение Dec 22 2005, 14:13
Сообщение #8


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



vot zdes tvoja problema :

http://www.dragonsgate.net/FAQ/cache/199.html


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 22 2005, 14:35
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Надо определить низкоуровневую функцию вывода _putchar() в конкретный поток\устройство.
С параметрами и возвращаемым значением не подскажу, надо уточнить в документации.
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Dec 23 2005, 05:55
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Спасибо! буду разбиратся


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 23 2005, 12:13
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Pyku_He_oTTyda @ Dec 22 2005, 07:51) *
putchar('R');
putchar('x');

как эта процедура прописывается в седьмой версии? Тыкните носом!



что ее там прописывать-то?

void putchar(char ch)
{
UDR = ch;
}
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 23 2005, 12:38
Сообщение #12


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Serega Doc @ Dec 22 2005, 10:27) *
Простите за offtop

Но если это ваши первые пробы програмирования для атмел то рекомендовал бы вам сразу разбиратся с IAR
Он более функционален.
Сам проходил через ICC.
Программа компилировавшаяся на ICC в 80% кристала в IAR занимает 60 % без оптимизации а возможностей у IAR намного больше. Правда нет мастера настроек так ничто не мешает настройки в ICC а программу в IAR


imho спорный вопрос. Если уж начинать, то я бы выбрал ICC из-за наличия в нем такого незаменимого и удобного для новичков инструмента, как Application builder. По качеству кода конечно, ICC сравним разве что с E-LAB Pascal... IAR гораздо лучше, но все равно код сильно избыточен. Для чипов до 16k памяти программ, и если не требуется использование 32х битной математики и математики с плавающей точкой, то я бы рекомендовал использовать исключительно asm.

К примеру прошивка-драйвер сетевой карты NE2000 с реализацией TCP стека для AVR занимает на асме всего 1.8k. Аналог на C около 20k.
Go to the top of the page
 
+Quote Post
Old1
сообщение Dec 23 2005, 20:51
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 697
Регистрация: 26-07-05
Из: Могилев
Пользователь №: 7 095



Цитата(defunct @ Dec 23 2005, 16:38) *
...imho спорный вопрос. Если уж начинать, то я бы выбрал ICC из-за наличия в нем такого незаменимого и удобного для новичков инструмента, как Application builder...

Вопрос действительно спорный, для новичка ИМХО все полезнее делать руками: "мат часть" при этом изучается более тщательно, опять же усваиваемость лучше, когда datasheet на девайс детально изучишь (и не один раз) и встроенную периферию сам сконфигурируешь, а не апликешн билдером на скорую руку сляпаешь. Время при этом конечно тратится много, но на собственное обучение его не стоит жалеть... Зато когда начнет как от зубов отскакивать, ради бога, но тогда, думаю в штуках типа Apl.Build. необходимость тем более отпадет... (excuse me за offtop).
Go to the top of the page
 
+Quote Post
_artem_
сообщение Dec 23 2005, 21:58
Сообщение #14


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



V tom linke kotorij priveden mnoju naverxu napisano (FAQ dlja ICC v& compilers):

How to use putchar() -- [AVR7]
This is currently applicable to ICC7 for AVR, but will eventually apply to all of our V7 compilers.

richard@imagecraft.com
Q: When I call printf, I get the following message:
!ERROR Function 'putchar' not defined.

A: This is a function that references the device's IO register locations and must be compiled specifically for the target device. You may find examples of this function for different devices under the <install root>\examples.AVR directory.


Q: But even when I write my own putchar and add it to my project file list, I still get the same error. Why?

A: Some device specific functions must be provided by users at project build time and cannot be put in the default libraries that we provide. putchar is one such function. From V7.03B onward, we have added a capability in the compiler/linker that if you decorate a function with the pragma

#pragma device_specific_function <function_name> ...

and if the function is needed but undefined, the linker will emit an error message of the above form. For putchar/getchar, this pragma is in the provided stdio.h file, and hence if you are writing your own putchar, you must have:

"#include <stdio.h>"

in your putchar source file.


Етот товариш хочет сказать что если вы написали свой вариант putchar() то в том файле где он ( putchar() )
содержится (исходник putchar() ) вам надо добавить #include <stdio.h> .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Laksus
сообщение Dec 25 2005, 19:26
Сообщение #15


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

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



_______________________________
defunct Дата Dec 23 2005, 14:13 Отправлено #12
...
что ее там прописывать-то?

void putchar(char ch)
{
UDR = ch;
}
_______________________________
Ну, может в "...\iccv7avr\examples.avr\putchar_basic.c" и чересчур наворочено
_____
int putchar(char c)
{
if (_textmode && c == '\n')
putchar('\r');
while ((USR & 0x20) == 0) // UDRE, data register empty
;
UDR = c;
return c;
}
_____
Но, по моему, проверить готовность регистра данных все таки необходимо.
То есть минимальный вариант наверное такой:
_______
void putchar(char c)
{
while ((USR & 0x20) == 0); // UDRE, data register empty
UDR = c;
}
_______
2005 12 25
Александр
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 18:01
Рейтинг@Mail.ru


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