Ошибка компоновщика в USB HID-коде для Microchip PIC (MPLAB / C18)

Я пытаюсь скомпилировать код для базовой функциональности USB HID. Я использую PIC18F14K50 с MPLAB 8.43 и компилятором Microchip C18.

Я использую стандартные файлы с сайта Microchip. Вот мой файл C и вот мой файл заголовка.

При сборке я получаю следующую ошибку:

Выполняется: C: \ Program Files \ Microchip \ mplabc18 \ v3.40 \ bin \ mplink.exe / p18F14K50 / lC: \ MCC18 \ lib / kC: \ MCC18 \ bin \ LKR usb_function_hid.o usb_device.o enumeration.o usb_descriptors. o / u_CRUNTIME / u_DEBUG / z__MPLAB_BUILD = 1 / z__MPLAB_DEBUG = 1 / oC: \ LPCUSBDK_Labs \ Lab1_files \ output \ Project Lab 1.cof / MC: \ LPCUSBDK_Labs \ Lab1_files \ output \ Project Lab 1.map

MPLINK 4.40, компоновщик

Версия базы данных устройств 1.3

Авторское право (c) 1998-2011 Microchip Technology Inc.

Ошибка - не удалось найти определение символа HIDDescriptor1 в файле ./usb_function_hid.o.

Ошибки: 1

Не удалось связать шаг.

Символ HIDDescriptor1 появляется в двух местах кода: в строке 173 PasteBin файла C и в строке 356 PasteBin файла заголовка.

Этот код взят прямо из Microchip. Я не уверен, почему это не ссылка. Я думаю, либо он разработан для другой версии компилятора, мне не хватает какой-то внешней зависимости, либо мне не хватает некоторых переключателей компилятора / компоновщика.

Есть идеи, что мне нужно сделать, чтобы это построить?


person Ozzah    schedule 18.05.2012    source источник


Ответы (1)


В файле заголовка вы определили HIDDescriptor1 извне. Поэтому, когда вы компилируете usb_function_hid.c, он будет нормально компилироваться, пока вы не попытаетесь связать его. Тогда он не может найти этот символ.

Кажется, вам нужно определить HIDDescriptor1 в собственном коде. Или это где-то еще в источнике, который вы скачали, и вам также нужно связать его. Но это точно не определено в файле .c.

РЕДАКТИРОВАТЬ:

Я загрузил и установил библиотеки приложений Microchip. Ни в одном источнике больше нет упоминания о HIDDescriptor1. Однако usb_function_hid.h подробно описывает другую структуру, которую я предполагаю заменой:

//USB HID Descriptor header as detailed in section 
//"6.2.1 HID Descriptor" of the HID class definition specification
typedef struct _USB_HID_DSC
{
    BYTE bLength;           //offset 0 
    BYTE bDescriptorType;           //offset 1
    WORD bcdHID;            //offset 2
    BYTE bCountryCode;      //offset 4
    BYTE bNumDsc;           //offset 5


    //USB_HID_DSC_HEADER hid_dsc_header[HID_NUM_OF_DSC];
    /* HID_NUM_OF_DSC is defined in usbcfg.h */

} USB_HID_DSC;

Просматривая примеры проектов, можно увидеть множество проектов HID, и все они прекрасно собираются с помощью компилятора C18. Я рекомендую скачать эту библиотеку еще раз; у вас может быть неполная или старая библиотека. Выделенный ниже проект предназначен для PIC18F14K50.

Библиотеки приложений Microchip \ USB \ Device - HID - Keyboard \ Firmware

person Adam Casey    schedule 18.05.2012
comment
Это очевидно. Но, как я уже сказал, код исходит непосредственно от Microchip, и они не предоставляют в своих инструкциях ничего, связанного с необходимостью определения HIDDescriptor. Более того, если бы мне нужно было определить его самому, то он не был бы помечен как extern. - person Ozzah; 21.05.2012
comment
Извините за указание на очевидное; на этом сайте никогда не знаешь, где находится опыт людей. Я считаю, что ваше устройство должно предоставлять свое собственное HIDDescriptor, заполненное всеми полями, чтобы сделать его правильным, и называть его HIDDescriptor1. Позвольте мне немного изучить код; это исходный код, который поставляется с C18, или вы использовали отдельную загрузку? - person Adam Casey; 21.05.2012
comment
Это отдельная загрузка с Microchip как часть их примера реализации USB HID. Я посмотрю, смогу ли я откопать ссылку. - person Ozzah; 22.05.2012
comment
Я загрузил библиотеки приложений Microchip и отредактировал свой ответ выше ... надеюсь, что это поможет - person Adam Casey; 22.05.2012
comment
Используя эту библиотеку, я смог заставить работать HID. Спасибо! (Я не уверен, что случилось с другой библиотекой Microchip. Может, она устарела?) - person Ozzah; 24.05.2012