|
Определение частоты в AVR Studio 5, Ошибка при компилляции |
|
|
|
Oct 10 2011, 05:35
|

Знающий
   
Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097

|
Прошу помочь отцедить проблему с определением частоты МК в проекте в AVR Studio 5. После добавления в свойствах проекта "AVR/GNU C Compiler" -> "Symbols" -> "Defined symbols" параметра "F_CPU=12000000UL", получаю в All options следующее: -funsigned-char -funsigned-bitfields -DF_CPU=12000000UL -Os -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -mmcu=atmega8 В проекте проводится предварительная проверка перед сборкой на предмет допустимой устанавливаемой частоты. Собственно сам проект. В файле usbconfig.h первое определение, использующее F_CPU: #define USB_CFG_CLOCK_KHZ (F_CPU/1000) а в файле usbdrvasm.S проверка наличия объявления этого определения и по условию подключение соответствующего include: # if USB_CFG_CLOCK_KHZ == 12000 # include "usbdrvasm12.inc"
Hid_example.rar ( 121.14 килобайт )
Кол-во скачиваний: 98
|
|
|
|
|
 |
Ответов
(1 - 13)
|
Oct 10 2011, 06:39
|

Знающий
   
Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097

|
А в AVR Studio 4 спускались? Из под нее все работает. -DF_CPU=12000000UL это пишется для usbdrvasm.S и даже если отбросить упоминание о #define USB_CFG_CLOCK_KHZ (F_CPU/1000) в usbconfig.h, то в usbdrvasm.S все равно должно все проходить гладко: Код ;---------------------------------------------------------------------------- ; Now include the clock rate specific code ;----------------------------------------------------------------------------
#ifndef USB_CFG_CLOCK_KHZ # ifdef F_CPU # define USB_CFG_CLOCK_KHZ (F_CPU/1000) # else # error "USB_CFG_CLOCK_KHZ not defined in usbconfig.h and no F_CPU set!" # endif #endif
#if USB_CFG_CHECK_CRC /* separate dispatcher for CRC type modules */ # if USB_CFG_CLOCK_KHZ == 18000 # include "usbdrvasm18-crc.inc" # else # error "USB_CFG_CLOCK_KHZ is not one of the supported crc-rates!" # endif #else /* USB_CFG_CHECK_CRC */ # if USB_CFG_CLOCK_KHZ == 12000 # include "usbdrvasm12.inc" # elif USB_CFG_CLOCK_KHZ == 12800 # include "usbdrvasm128.inc" # elif USB_CFG_CLOCK_KHZ == 15000 # include "usbdrvasm15.inc" # elif USB_CFG_CLOCK_KHZ == 16000 # include "usbdrvasm16.inc" # elif USB_CFG_CLOCK_KHZ == 16500 # include "usbdrvasm165.inc" # elif USB_CFG_CLOCK_KHZ == 20000 # include "usbdrvasm20.inc" # else # error "USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!" # endif #endif /* USB_CFG_CHECK_CRC */
Сообщение отредактировал DVF - Oct 10 2011, 06:45
|
|
|
|
|
Oct 10 2011, 09:40
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (DVF @ Oct 10 2011, 08:35)  а в файле usbdrvasm.S проверка наличия объявления этого определения и по условию подключение соответствующего include: Так а ругается-то на что? С ходу видно, что в ассемблерный файл передается "Сишное" определение частоты, с квалификатором UL, которого ассемблер понимать не должен. Я не пользуюсь студией, но в моих makefile написано примерно следующее: CODE CFLAGS += -DF_CPU=$(F_CPU)UL ASMFLAGS += -DF_CPU=$(F_CPU) QUOTE (DVF @ Oct 10 2011, 09:39)  даже если отбросить упоминание о #define USB_CFG_CLOCK_KHZ (F_CPU/1000) в usbconfig.h, то в usbdrvasm.S все равно должно все проходить гладко: Вообще-то это работать не должно. Препроцессор выполняет текстовые подстановки, а вычисления вроде F_CPU/1000 происходят на этапе компиляции, когда препроцессор уже отработал. Т.е. по логике не должно выполняться ни одно из этих условий. Или я что-то не до конца понимаю в работе препроцессора.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 10 2011, 11:37
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Возьмите за основу пример одного из проектов, идущих с WinAVR. Там для начала достаточно внятно написано. Будут вопросы - поможем. Цитата(DVF @ Oct 10 2011, 15:22)  Забыл. Ругается: error "USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!" - это из предыдущего приведенного кода файла usbdrvasm.S Правильно ругается. У вас похоже вообще нет проблем с препроцессорм, мейкфайлом и асмовыми дефайнами. А что у вас с USB_CFG_CHECK_CRC?
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 10 2011, 11:43
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (DVF @ Oct 10 2011, 14:22)  Я тоже не силен. Проект прикреплял, если надо на makefile взглянуть. Кстати и без UL пробовал с тем же результатом. И опять-таки Вы даете пример как makefile четвертой студии, а в пятой он немного другой. makefile вообще-то для утилиты make. Работает без студии. Студия может его генерировать, но это уже другой вопрос. QUOTE (DVF @ Oct 10 2011, 14:22)  Забыл. Ругается: error "USB_CFG_CLOCK_KHZ is not one of the supported non-crc-rates!" - это из предыдущего приведенного кода файла usbdrvasm.S Вот-вот. Не выполнилось ни одно из условий. О чем я и писал. И в четвертой студии должно было быть то же самое. Ну не умеет препроцессор делить. Но если вы посмотрите в начало отцитированного вами файла, то увидите такие строки: CODE #ifndef USB_CFG_CLOCK_KHZ # ifdef F_CPU # define USB_CFG_CLOCK_KHZ (F_CPU/1000) т.е. вам нужно определить USB_CFG_CLOCK_KHZ точно таким же образом, как вы определяли F_CPU, и тогда неправильная часть этого файла не будет участвовать в компиляции.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Oct 10 2011, 12:58
|

Знающий
   
Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097

|
Цитата(Сергей Борщ @ Oct 10 2011, 15:43)  И в четвертой студии должно было быть то же самое. Ну не умеет препроцессор делить. Но здесь все собирается. Если я определяю USB_CFG_CLOCK_KHZ в makefile (а в usbconfig.h заредактирую), то ругается и на то, что он не определен и на то, что F_CPU не определен, а дальше и недостойная частота. Если я в usbconfig.h делаю все определения, то ругается на переопределения и неопределение F_CPU для util/delay.h Походу у меня уже шарики за ролики...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|