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

 
 
> Портирование с GCC, ATmega8
P@S@f
сообщение Apr 30 2011, 21:56
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 30-04-11
Пользователь №: 64 713



Захотелось немного обновить прошивку Сергея Рюмика для переходника 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 - Apr 30 2011, 21:57
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
P@S@f
сообщение May 1 2011, 17:11
Сообщение #2





Группа: Новичок
Сообщений: 3
Регистрация: 30-04-11
Пользователь №: 64 713



Избавился от всех варнингов кроме этих:
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


Сообщение отредактировал P@S@f - May 1 2011, 17:12
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 2 2011, 07:28
Сообщение #3


Гуру
******

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



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 в конце строки.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
P@S@f
сообщение May 2 2011, 09:25
Сообщение #4





Группа: Новичок
Сообщений: 3
Регистрация: 30-04-11
Пользователь №: 64 713



Цитата(Сергей Борщ @ 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);      \
           }                                        \
    }                                               \


Сообщение отредактировал P@S@f - May 2 2011, 09:25
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 2 2011, 11:13
Сообщение #5


Гуру
******

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



QUOTE (P@S@f @ May 2 2011, 12:25) *
Там строки типа

Копаем глубже - как объявлены USB_PROP_IS_RAM и USB_PROP_IS_DYNAMIC?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

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

 


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


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