Перейти к содержанию
    

Вышла очередная версия AVR-USB драйвера от Objective Development

+extern unsigned usbCrc16(uchar __near *data, uchar len)

 

Не компилируется в tiny - модели: Error[Pa043]: the keyword "__near" is not available with the current settings

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

+extern unsigned usbCrc16(uchar __near *data, uchar len)

Не компилируется в tiny - модели: Error[Pa043]: the keyword "__near" is not available with the current settings

Это для меня сюрприз, придется обходить по другому. Я проверял на меге32, но в tiny. Не хочется переделывать асмовский код, хотя не столь и сложно.

 

AT90S2313? Версия IAR?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, at90s2313. IAR AVR 4.12A, есть для проверки 4.11A и 3.20D.

Изменено пользователем EWAVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, действительно для AT90S2313 __tiny недоступно даже в виде исключения (документировано), вот не ожидал от IAR такой диверсии. Почему, спрашивается...

 

Самый простой workaround - это вот такой:

 

usbdrv.h:

//extern unsigned usbCrc16(uchar *data, uchar len);
extern unsigned usbCrc16(unsigned dptr, uchar len);

//extern unsigned usbCrc16Append(uchar *data, uchar len);
extern unsigned usbCrc16Append(unsigned dptr, uchar len);

usbdrv.c:

//  usbCrc16Append(&usbTxBuf1[1], len);
    usbCrc16Append((unsigned)(&usbTxBuf1[1]), len);

//      usbCrc16Append(usbTxBuf + 1, len);
        usbCrc16Append((unsigned)(usbTxBuf + 1), len);

Это для проверки. Вынуждает передать функции два байта в качестве указателя вместо одного. В дизассемблере код похож на правду, в железе не проверял.

 

Решение не самое красивое, но работоспособное. Безусловно, оптимальнее переписать ассемблерные функции для решения проблемы, но автор едва ли согласится делать это в официальной версии. Потому пока прошу лишь проверить работоспособность. Во всяком случае, всегда есть возможность так и оставить для личных целей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо, все заработало( все так просто, сам мог бы догадаться!).

Далее я попробовам перенести в IAR свой прект на tiny26. В нем использутся прерывание от АЦП, и линкер выдал следующее:

Error[e16]: Segment INTVEC (size: 0x18 align: 0x1) is too long for segment definition. At least

0x4 more bytes needed. The problem occurred while processing the segment placement

command "-Z(CODE)INTVEC=0-(_..X_INTVEC_SIZE-1)", where at the moment of placement

the available memory ranges were "CODE:0-1,CODE:4-17"

Reserved ranges relevant to this placement:

CODE:0-1 ?FILL1

CODE:2-3 Absolute code from usbdrvasm

CODE:4-17 ?FILL2

Ассемблерный код нагло залез в сегмент INTVEC.

Разборки с директивами ассемблера показали, что в файле usbdrvasm.S в месте

 

ASEG

ORG INT0_vect + IVT_BASE_ADDRESS

rjmp SIG_INTERRUPT0

 

нужно поменять ASEG на COMMON INTVEC, тогда линкуется без проблем.

 

P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-}

Изменено пользователем EWAVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно поменять ASEG на COMMON INTVEC, тогда линкуется без проблем.

Да, я тоже предпочел бы использовать INTVEC, но сразу как-то не проэкспериментировал, напоровшись на проблемы с ORG. Однозначно, что предложенный подход более грамотный.

 

IVT_BASE_ADDRESS появилась ради размещения драйвера в boot area для создания загрузчиков. В варианте с INTVEC эта часть снова уходит в небытие.

 

P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-}

Но если замыкаться на IAR, то смысл в этом есть - появляется возможность разместить определенный код в мЕньшем устройстве. Остается лишь проблема, как красиво с минимумом правок решить проблему с передачей указателя. Ну что стоило поддержать __near для всех CPU...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые EWAVR & OSNWT :1111493779:

Ну поделитесь же Вашими портами PowerSwitch для ИАР_а

Ато читаю Вашу переписку, слюни текут!

У самого опыта еще нету. :help:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-}

Но если замыкаться на IAR, то смысл в этом есть - появляется возможность разместить определенный код в мЕньшем устройстве. Остается лишь проблема, как красиво с минимумом правок решить проблему с передачей указателя. Ну что стоило поддержать __near для всех CPU...

 

Ох, господа, не надеялся я бы так на T26. Недавно писал про глюки со старшим байтом X, так вот действительно:

 

If you use

 

LD r16,X

 

then you can use XH (r27) to something else, if you use

 

LD r16, X+

 

XL is incremented and XH is reset. I can see that the description in the instruction set is a bit unclear, but you have to

believe me in that this is how it is desgined to work ( I double checked with the IC-designers) and that it is not a bug.

 

Это я от Atmel'а ответ получил...

 

Особенно убивает последняя фраза про то, что так задумано, а в описании комманд - немного ошибочно ;)

 

Мне пришлось из-за этого ПРИНУДИТЕЛЬНО включить для T26 режим near, точнее выбрать в опциях проекта не конкретно проц, а модель -v1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все! Откомпилил PowerSwitch в ИАР_е под ATMEGA8535 , слепил драйвера в LIBUSB-WIN32,

проинсталил, подключил, есть в системе устройство-PowerSwitch. :a14:

 

Теперь не могу (не знаю чем) скомпилить commandline/powerswitch.c

любые попытки - море ошибок.

 

Вижу, Вы достаточно опытные спецы, не расскажете ли как с этим девайсом

пообщаться из-под DELPHI5?

 

C IgorPlug (USBtoRS232) имею некотрый опыт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Никаких проблем с компиляцией, недостающие файлы usb.h и libusb.lib берутся в дистрибутиве libusb-win32. Компилировал Borland C++ 5.5 из командной строки:

bcc32.exe powerswitch.c libusb.lib

Изменено пользователем EWAVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел ВС++ 5.2 Установил. Скомпилил. 2 WARNING:

 

C:\...werSwitch.2006-03-14\commandline>bcc32.exe powerswitch.c libusb.lib

Borland C++ 5.2 for Win32 Copyright © 1993, 1997 Borland International

powerSwitch.c:

Warning powerSwitch.c 127: 'handle' is assigned a value that is never used in function main

Turbo Link Version 2.0.68.0 Copyright © 1993,1997 Borland International

Warning: Extern '_usb_busses' was not qualified with __import in module powerSwitch.c

 

Получил екзешник 61440 байт.

Подключил устройство.

на строку "powerSwitch on 0 2.5" получаю:

powerSwitch.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.

(WINXP SP1 rus) :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну поделитесь же Вашими портами PowerSwitch для ИАР_а

Алексей, отправить PM не удалось, какая-то ерунда с сервером. Пишу тут.

 

К сожалению, я не занимался попытками полноценно скомпилировать PowerSwitch под IAR. Я просто раскрутил, закомментировал вотчдоги и т.п., проверил, что собирается в tiny, и стер.

 

Как я понял, проблема уже решена.

 

Насчет командной строки то же самое: я уже писал на форуме, что варианты под libusb мне не интересны на данном этапе, и примеры приложений obdev я не компилировал. Я использовал для своих целей основу из Automator, и собирал ее под VisualStudio 6. Но собралось оно не сразу, а я вообще переписал приличный кусок.

 

Так что готовыми решениями стандартных примеров не порадую, увы. Да и интереснее самому разобраться. А, главное, полезнее.

 

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Олег!

Ерунда с сервером похоже есть!

ERROR

The requested URL could not be retrieved

 

--------------------------------------------------------------------------------

 

While trying to retrieve the URL: http://electronix.ru/forum/index.php?

 

The following error was encountered:

 

Zero Sized Reply

Squid did not receive any data for this request

 

Но ко мне письма пришли, надеюсь к Вам тоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключил устройство.

на строку "powerSwitch on 0 2.5" получаю:

powerSwitch.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства.

 

Есть маленькая хитрость: выравнивание данных нужно включить по границе байта (data align=byte, ключ компиляции -a1 или -a-). Сам чуть не поседел, пока нашел. А command-line-only BC++ 5.5 можно скачать с сайта Borland.

Изменено пользователем EWAVR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

EWAVR,

 

если есть возможность, прошу проверить работоспособность экспериментальной версии порта USBDRV на аппаратном tiny контроллере (tiny26, 90s2313 или т.п.). Ссылка на порт в PM. Это приватный билд, его нет смысла хранить (тем более, в нем есть кое-что неучтенное). Если будет все нормально, то будет официальная версия с поддержкой tiny.

 

У меня оно работает и в small, и в tiny на ATmega32 (код отличается на 101 байт на очень малой программе), но на маленьких контроллерах не тестировал.

 

Особенности: необходимость определения регистров работы с прерываниями для разных контроллеров (см. файл usbconfig-prototype.h в конце). К сожалению, #ifdef в IAR не работает для SFR, потому придется явно задать нужные регистры. Что можно задать - можно посмотреть в коде usbdrv.h, где возможность определения уже учтена.

 

Просьба не распространять эту версию - если с ней проблем не будет, то на следующей неделе будет официальная на сайте.

 

Прошу сообщить результат по мере возможности, или если такой возможности нет - то тоже сообщить, чтобы передать автору.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...