Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.01.2009, 20:05
|
|
Частый гость
Регистрация: 22.07.2007
Адрес: Харьков
Сообщений: 47
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Я не уверен, но возвращаемый main тип данных, должен быть void.
|
|
|
|
18.01.2009, 21:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
По стандарту int main(void)
Топикстартеру - возьмите free IDE от Атмел - AvrStudio. При ее установке WinAvr уже должен быть установлен, тогда студия сама установит плагин взаимодействия с компилятором. Создайте в ней проект ( GCC ), добавьте в проект требуемый C файл, установите в свойствах проекта тип контроллера, уровень оптимизации (Os) и тактовую частоту, нажмите F7 и получите результат.
Правда с этим исходником он будет неработоспособен
|
|
|
|
18.01.2009, 22:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Уверены? В Ваших весьма ПРОСТЫХ примерах встречаются ГРУБЫЕ ошибки. Которые могут разочаровать заинтересовавшегося человека и отбить у него желание заниматься программированием для встроенных систем.
Я посмотрел самый первый и самый простой пример для GCC - "Эта программа мигает светодиодом который подключен
к ножке PB0 порта PORTB ATmega8...". Помигать светодиодом, что может быть проще? Но посмотрим повнимательней вот на эту строчку:
Код:
|
_delay_us(500); // Пауза 500 МикроСек. |
На первый взгляд криминала не видно, используется библиотечная функция, но достаточно заглянуть в подключенный хедер, чтобы обнаружить следующее:
Цитата:
|
The maximal possible delay is 768 us / F_CPU in MHz.
|
Как видно из текста желаемая тактовая частота составляет 8МГц. 768 поделить на 8 сможете самостоятельно? Результат далек от требуемых 500...
С этими 8 мегагерцами тоже не все радужно. Вы пытаетесь учить людей по принципу - "делай как я", а очень часто верен обратный принцип. Почитайте сами книгу Кернигана и Ричи, которую советуете читать другим. Оттуда узнаете, что в С тип по умолчанию - int. Тип этот платформозависимый и знаковый, и в случае с AVR имеет всего 16 бит. Т.е. любое прямое указание числа в тексте однозначно имеет именно этот тип. Определение константы через дефайн используется в дальнейшем как простая текстовая подстановка. Далее компилятор обрежет Ваши указанные 8000000 до.. того самого типа по умолчанию - int. Что из этого получится попробуйте догадаться сами.
Хотя раз этого не случилось за несколько лет, что существует Ваш ресурс подскажу - после числовой константы допустимо ( в этом случае - необходимо) указывать ее тип. В этом случае требуется 32 битовый беззнаковый unsigned long. Сам дефайн получится -
Код:
|
#define F_CPU 8000000UL |
Еще - Вы сами пробуете проделать то, что предлагаете другим? Я в этом сомневаюсь. Проделайте начиная с пункта 2 -
Цитата:
|
2) Создайте папку для тестового проекта - например C:WinAVR\_test
|
, по пункт 6 -
Цитата:
|
6) Компиляция проекта
|
. Не отступайте от своих рекомендаций ни на шаг! Поставьте себя на место человека делающего самые первые шаги. И посмотрите на то, что получите в действительности. Результат Вас удивит....
|
|
|
|
18.01.2009, 23:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Вы думаете что скриншоты я в фотошопе нарисовал чтоль ???
Ну думайте.
\
Вот точка останова до паузы 500 мкС
Вот точка останова после
ПоСчитайте величину паузы.
Файлы проекта лежат там же
http://avr123.nm.ru/04.htm
сразу под скриншотом протеуса.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
19.01.2009, 01:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Вы думаете что скриншоты я в фотошопе нарисовал чтоль ???
|
А, в фотошопе... Ну хоть рисуете хорошо
Результат компиляции:
(Я включил оптимизацию Os, без этого задержка будет непредсказуемой. У Вас в пошаговой инструкции по созданию мейкфайла про оптимизацию нет ни слова...)
Цитата:
|
avr-gcc.exe -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT test_delay.o -MF dep/test_delay.o.d -c ../test_delay.c
In file included from ../test_delay.c:2:
f:/winavr/bin/../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for ‹util/delay.h›"
../test_delay.c:5:1: warning: "F_CPU" redefined
f:/winavr/bin/../avr/include/util/delay.h:86:1: warning: this is the location of the previous definition
../test_delay.c:8: warning: return type of 'main' is not 'int'
Build succeeded with 4 Warnings...
|
На варнинги следует забивать? Интересный подход.
Симулятор:
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/19012009/8992056.GIF" frameborder="0" name="fr1922321" scrolling="yes" width="470" height="442" align="bottom"›[img]nuke/users_images/19012009/8992056.GIF[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
|
|
|
|
19.01.2009, 01:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Не понял как вставить сразу две картинки...
Вторая:
-- Прилагается рисунок: --
|
|
|
|
19.01.2009, 01:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Т.е. пауза 500 циклов-тактов.
Спасибо.
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
19.01.2009, 02:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Удивительно - в проекте и F_CPU задано в мейкфайле, и оптимизация включена.. На Вашей пошаговой инструкции этого нет. Зачем вообще эта строка? С какой целью она присутствует в исходнике? Представим что я восторженный читатель,и задаю Вам, как автору курса вопрос. И ес-но хочу услышать ответ.
Хотя и с Вашим мейкфайлом сборка не совсем чистая:
Цитата:
|
Compiling C: test.c
avr-gcc -c -mmcu=atmega8 -I. -gdwarf-2 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=./test.lst -std=gnu99 -Wundef -MMD -MP -MF .dep/test.o.d test.c -o test.o
test.c:17:1: warning: "F_CPU" redefined
‹command-line›: warning: this is the location of the previous definition
test.c:20: warning: return type of 'main' is not 'int'
|
Для программы в три строки два предупреждения получить, это стараться надо
Вообще весело получается. В шаблоне мейкфайла оказывается и 8МГц и Os включены по умолчанию. То есть действительно соберется правильно. Но вот если у человека на реальном девайсе такт будет другой... Ох и упарится он искать, где и что надо менять. Тем более,что загадочное кривое определение F_CPU присутствует прямо в файле. Те картинки, что я приводил выше не годятся - они рассчитаны на незаданную тактовую. В этом я был неправ. Но курс все равно бесполезен, то что в нем описано напоминает танцы с бубном. Не зададим нужную частоту, авось само заработает... И вот ведь совпадение...
|
|
|
|
19.01.2009, 02:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от kison
|
Но курс все равно бесполезен
|
Прикольно !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
19.01.2009, 02:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от avr123-nm-ru
|
Прикольно !
|
На самом деле печально. Ведь у нас как -
Цитата:
|
кто воевать умеет - тот воюет, кто не умеет - учит воевать
|
Именно в этом и печаль, читатели Вашего курса обречены на вечное изобретение мигалок светодиодами. Так как в нем нет ни описания языка С ( а в нем меньше 10 операторов собственно языка!), ни ассемблера, ни приемов программирования (не готовых проектов с лозунгом - делай как у меня, а обоснования именно такого решения. Причем желательно показать несколько вариантов решения одной задачи).
Народная мудрость гласит - вместо рыбы лучше дать человеку удочку. Вы же даете именно рыбу. И когда человек, изучавший программирование по Вашему курсу, захочет сделать самолет, то у него все равно получится рыба... Правда курс бесплатен, а в нашей стране нахаляву и уксус пьют. Так и с курсом.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:28.
|
|