EWAVR 0 20 марта, 2006 Опубликовано 20 марта, 2006 · Жалоба +extern unsigned usbCrc16(uchar __near *data, uchar len) Не компилируется в tiny - модели: Error[Pa043]: the keyword "__near" is not available with the current settings Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
osnwt 0 20 марта, 2006 Опубликовано 20 марта, 2006 · Жалоба +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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EWAVR 0 20 марта, 2006 Опубликовано 20 марта, 2006 (изменено) · Жалоба Да, at90s2313. IAR AVR 4.12A, есть для проверки 4.11A и 3.20D. Изменено 20 марта, 2006 пользователем EWAVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
osnwt 0 20 марта, 2006 Опубликовано 20 марта, 2006 · Жалоба Да, действительно для 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); Это для проверки. Вынуждает передать функции два байта в качестве указателя вместо одного. В дизассемблере код похож на правду, в железе не проверял. Решение не самое красивое, но работоспособное. Безусловно, оптимальнее переписать ассемблерные функции для решения проблемы, но автор едва ли согласится делать это в официальной версии. Потому пока прошу лишь проверить работоспособность. Во всяком случае, всегда есть возможность так и оставить для личных целей. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EWAVR 0 20 марта, 2006 Опубликовано 20 марта, 2006 (изменено) · Жалоба Спасибо, все заработало( все так просто, сам мог бы догадаться!). Далее я попробовам перенести в 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 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-} Изменено 20 марта, 2006 пользователем EWAVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
osnwt 0 21 марта, 2006 Опубликовано 21 марта, 2006 · Жалоба нужно поменять ASEG на COMMON INTVEC, тогда линкуется без проблем. Да, я тоже предпочел бы использовать INTVEC, но сразу как-то не проэкспериментировал, напоровшись на проблемы с ORG. Однозначно, что предложенный подход более грамотный. IVT_BASE_ADDRESS появилась ради размещения драйвера в boot area для создания загрузчиков. В варианте с INTVEC эта часть снова уходит в небытие. P.S. При переходе с gcc на IAR в проекте на tiny26 я выиграл аж 10 байт, так что овчинка выделки не стоила. Но все равно спасибо за помошь:-} Но если замыкаться на IAR, то смысл в этом есть - появляется возможность разместить определенный код в мЕньшем устройстве. Остается лишь проблема, как красиво с минимумом правок решить проблему с передачей указателя. Ну что стоило поддержать __near для всех CPU... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksey_gregul 0 22 марта, 2006 Опубликовано 22 марта, 2006 · Жалоба Уважаемые EWAVR & OSNWT :1111493779: Ну поделитесь же Вашими портами PowerSwitch для ИАР_а Ато читаю Вашу переписку, слюни текут! У самого опыта еще нету. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 22 марта, 2006 Опубликовано 22 марта, 2006 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksey_gregul 0 22 марта, 2006 Опубликовано 22 марта, 2006 · Жалоба Все! Откомпилил PowerSwitch в ИАР_е под ATMEGA8535 , слепил драйвера в LIBUSB-WIN32, проинсталил, подключил, есть в системе устройство-PowerSwitch. :a14: Теперь не могу (не знаю чем) скомпилить commandline/powerswitch.c любые попытки - море ошибок. Вижу, Вы достаточно опытные спецы, не расскажете ли как с этим девайсом пообщаться из-под DELPHI5? C IgorPlug (USBtoRS232) имею некотрый опыт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EWAVR 0 22 марта, 2006 Опубликовано 22 марта, 2006 (изменено) · Жалоба Никаких проблем с компиляцией, недостающие файлы usb.h и libusb.lib берутся в дистрибутиве libusb-win32. Компилировал Borland C++ 5.5 из командной строки: bcc32.exe powerswitch.c libusb.lib Изменено 22 марта, 2006 пользователем EWAVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksey_gregul 0 22 марта, 2006 Опубликовано 22 марта, 2006 · Жалоба Нашел ВС++ 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) :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
osnwt 0 22 марта, 2006 Опубликовано 22 марта, 2006 · Жалоба Ну поделитесь же Вашими портами PowerSwitch для ИАР_а Алексей, отправить PM не удалось, какая-то ерунда с сервером. Пишу тут. К сожалению, я не занимался попытками полноценно скомпилировать PowerSwitch под IAR. Я просто раскрутил, закомментировал вотчдоги и т.п., проверил, что собирается в tiny, и стер. Как я понял, проблема уже решена. Насчет командной строки то же самое: я уже писал на форуме, что варианты под libusb мне не интересны на данном этапе, и примеры приложений obdev я не компилировал. Я использовал для своих целей основу из Automator, и собирал ее под VisualStudio 6. Но собралось оно не сразу, а я вообще переписал приличный кусок. Так что готовыми решениями стандартных примеров не порадую, увы. Да и интереснее самому разобраться. А, главное, полезнее. Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aleksey_gregul 0 23 марта, 2006 Опубликовано 23 марта, 2006 · Жалоба Олег! Ерунда с сервером похоже есть! 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 Но ко мне письма пришли, надеюсь к Вам тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EWAVR 0 23 марта, 2006 Опубликовано 23 марта, 2006 (изменено) · Жалоба Подключил устройство. на строку "powerSwitch on 0 2.5" получаю: powerSwitch.exe - обнаружена ошибка. Приложение будет закрыто. Приносим извинения за неудобства. Есть маленькая хитрость: выравнивание данных нужно включить по границе байта (data align=byte, ключ компиляции -a1 или -a-). Сам чуть не поседел, пока нашел. А command-line-only BC++ 5.5 можно скачать с сайта Borland. Изменено 23 марта, 2006 пользователем EWAVR Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
osnwt 0 24 марта, 2006 Опубликовано 24 марта, 2006 · Жалоба EWAVR, если есть возможность, прошу проверить работоспособность экспериментальной версии порта USBDRV на аппаратном tiny контроллере (tiny26, 90s2313 или т.п.). Ссылка на порт в PM. Это приватный билд, его нет смысла хранить (тем более, в нем есть кое-что неучтенное). Если будет все нормально, то будет официальная версия с поддержкой tiny. У меня оно работает и в small, и в tiny на ATmega32 (код отличается на 101 байт на очень малой программе), но на маленьких контроллерах не тестировал. Особенности: необходимость определения регистров работы с прерываниями для разных контроллеров (см. файл usbconfig-prototype.h в конце). К сожалению, #ifdef в IAR не работает для SFR, потому придется явно задать нужные регистры. Что можно задать - можно посмотреть в коде usbdrv.h, где возможность определения уже учтена. Просьба не распространять эту версию - если с ней проблем не будет, то на следующей неделе будет официальная на сайте. Прошу сообщить результат по мере возможности, или если такой возможности нет - то тоже сообщить, чтобы передать автору. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться