Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Портирование с GCC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
P@S@f
Захотелось немного обновить прошивку Сергея Рюмика для переходника Sega джойстика на USB и скомпилить её под IAR.
Оригинальная прошивка с исходными текстами здесь, в архиве:
ftp://ftp.radio.ru/pub/2007/01/usbjoy/prog.zip
Правда исходники там только для одного джойстика, а прошивок несколько (sega2 - на два джойстика, sega1-2 - на два джойстика, которые будут использоваться по-переменно), но это отдельная тема.
Взял новый драйвер USB от objective development: http://www.obdev.at/products/vusb/download.html
Отредактировал как надо usbconfig-prototype.h в соответствии со старым, переименовал в usbconfig.h, заменил все остальные исходники драйвера новыми, в т.ч. скопировал asmcommon.inc и usbdrvasm12.inc
Создал новый проект в IAR, добавил все файлы.
В свойствах проекта выбрал контроллер ATmega8a, на вкладке System отметил галочку "Enable bit defintions in I/O-include files".
В common.h выкинул io.h, заменил на iom8a.h, выкинул pgmspace.h, пофиксил ошибку с __flash (было объявлено как const chat, требовало char), выкинул interrupt.h, новых ругательств после этого не заметил.

Теперь осталось ругательство на строку, в которой присутствует переменная USBIN:
Error[Pe020]: identifier "PINPORTD" is undefined
в
Код
uchar usbLineStatus = USBIN & USBMASK;
А также аналогичные:
Error[50]: Undefined symbol:'PINPORTD'
Error[50]: Undefined symbol:'DDRPORTD'
Error[50]: Undefined symbol:'PORTPORTD'
в строках
Код
sbis    USBIN, USBMINUS

Код
in      x2, USBDDR;[-12] 12 cycles until SOP

Код
sbi     USBOUT, USBMINUS;[-10] prepare idle state; D+ and D- must have been 0 (no pullups)
соответственно.
Это всё ошибки в драйвере USB.
Еще есть кучка варнингов:
Warning[Pe223]: function "bit_is_set" declared implicitly C:\sega-update\in_sega.c 33
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 48
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 50
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) C:\sega-update\usbdrv.c 1
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 318
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 320
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 329
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 331
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 333
Warning[16]: Suspicious sfr expression C:\sega-update\usbdrvasm.S 74

Собственно всё. Не знаю что с этим делать дальше.
P@S@f
Избавился от всех варнингов кроме этих:
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 318
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 320
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 329
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 331
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 333

От этого избавился Warning[Pe223]: function "bit_is_set" declared implicitly C:\sega-update\in_sega.c 33
явно объявив функцию
Код
#define bit_is_set(reg, bit)  ((reg & (1<<(bit))) != 0)
От этих
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 48
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 50
не знаю как, само собой получилось...

Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) C:\sega-update\usbdrv.c 1
- этот что-то на точку ругался в комментарии к файлу, переписал везде в этих строках точки и варнинг исчез

Warning[16]: Suspicious sfr expression C:\sega-update\usbdrvasm.S 74
от этого избавился так:
Код
// #if USB_INTR_PENDING < 0x40 /* This is an I/O address, use in and out */ - ругалось на директиву if, видимо IAR в ассемблерных исходниках её не поддерживает
# define USB_LOAD_PENDING(reg) in reg, USB_INTR_PENDING
# define USB_STORE_PENDING(reg) out USB_INTR_PENDING, reg
// #else /* It's a memory address, use lds and sts */
// # define USB_LOAD_PENDING(reg) lds reg, USB_INTR_PENDING
// # define USB_STORE_PENDING(reg) sts USB_INTR_PENDING, reg
// #endif
Сергей Борщ
QUOTE (P@S@f @ May 1 2011, 20:11) *
Избавился от всех варнингов кроме этих:
Трудно предполагать, не видя исходного кода строки, на которую идет ругань. Вераятнее всего знaковая единица сдвигается на 15 бит: (1<<15), в этом случае сдвигать надо беззнаковую единицу: (1U << 15).
QUOTE (P@S@f @ May 1 2011, 20:11) *
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) C:\sega-update\usbdrv.c 1
- этот что-то на точку ругался в комментарии к файлу, переписал везде в этих строках точки и варнинг исчез
Ругался на *nixовый символ перевода строки. Достаточно было нажать Del и Enter в конце строки.
P@S@f
Цитата(Сергей Борщ @ May 2 2011, 10:28) *
Трудно предполагать, не видя исходного кода строки, на которую идет ругань. Вераятнее всего знaковая единица сдвигается на 15 бит: (1<<15), в этом случае сдвигать надо беззнаковую единицу: (1U << 15).
Там строки типа
Код
GET_DESCRIPTOR(USB_CFG_DESCR_PROPS_DEVICE, usbDescriptorDevice)
Сам GET_DESCRIPTOR объявлен так:
Код
#define GET_DESCRIPTOR(cfgProp, staticName)         \
    if(cfgProp){                                    \
        if((cfgProp) & USB_PROP_IS_RAM)             \
            flags = 0;                              \
        if((cfgProp) & USB_PROP_IS_DYNAMIC){        \
            len = usbFunctionDescriptor(rq);        \
        }                                           \
         else                                       \
           {                                        \
            len = USB_PROP_LENGTH(cfgProp);         \
            usbMsgPtr = (uchar *)(staticName);      \
           }                                        \
    }                                               \
Сергей Борщ
QUOTE (P@S@f @ May 2 2011, 12:25) *
Там строки типа

Копаем глубже - как объявлены USB_PROP_IS_RAM и USB_PROP_IS_DYNAMIC?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.