ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
953657 Топик полностью
kuzulis (18.10.2019 14:29, просмотров: 426) ответил sladkoejka на IAR 8051 10.10.1 глючный компилятор (int и long типы, printf) для Cypress CY7C68013A
Всем привет, подниму тему. У меня также аналогичная проблема: не работает код, созданный в IAR для чипа CY7C68013A. Суть в том, что я пилю (по приколу) USB HID Game Pads эмулятор для 10-ти кнопочных джойстиков для NES (от старых добрых 8-битных дендей). Там уже все работает при использовании компиляторов KEIL C51 и SDCC (хотя, с SDCC тоже какие-то непонятки возникают, но это другая история). Но вот, с IAR какая то засада: ось не может проенумеровать USB дескрипторы устройства. Например, при попытке получить «Device Descriptor», ось получает какую то хрень у которой все поля заполнены нулями (вместо содержимого этого дескриптора). Я уже понавырывал на себе все волосы, но так и не понял что за фигня. Я в коде не использую таблицу автовекторов (и все эти джампы), а делаю поллинг влагов регистров USB в main цикле. К примеру, этот код: static BOOL ep0_std_descriptor_proc(void) { BYTE XDATA *pdesc = (BYTE XDATA *)hid_ep0_std_desc_get(); if (pdesc) { SUDPTRH = usb_word_msb_get(pdesc); SUDPTRL = usb_word_lsb_get(pdesc); return TRUE; } return FALSE; } выполняется, но, кажется, что не работают фичи с SUDPTRH и SUDPTRL. @sladkoejka, я еще не пробовал Ваш фикс с асм-ов с размещением таблицы векторов по нулевому адресу. Может есть другое решение? Например, что-то поправить в файле скрипта линковщика: lnk51ew_CY7C68013A.xcl ? Я как бы не очень спец по ассемблерам и 8051 (уже 15 лет назад проходил и забыл), но в том файле декларирована куча всяких переменных, возможно имеет смысл их переопределить? Или что-то еще?