2
votes

I'm trying to compile some code for basic USB HID functionality. I'm using a PIC18F14K50 with MPLAB 8.43 and the Microchip C18 compiler.

I'm using some standard files from Microchip's website. Here is my C file and here is my header file.

I'm getting the following error when I build:

Executing: "C:\Program Files\Microchip\mplabc18\v3.40\bin\mplink.exe" /p18F14K50 /l"C:\MCC18\lib" /k"C:\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 /o"C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.cof" /M"C:\LPCUSBDK_Labs\Lab1_files\output\Project Lab 1.map" /W

MPLINK 4.40, Linker

Device Database Version 1.3

Copyright (c) 1998-2011 Microchip Technology Inc.

Error - could not find definition of symbol 'HIDDescriptor1' in file './usb_function_hid.o'.

Errors : 1

Link step failed.

The HIDDescriptor1 symbol appears in 2 places in the code: PasteBin line 173 of the C file and PasteBin line 356 of the header file.

This code comes straight from Microchip. I'm not sure why it wouldn't be linking. I think either it's designed for another version of the compiler, I'm missing some external dependency, or I'm missing some compiler/linker switches.

Any ideas on what I need to do to get this to build?

1

1 Answers

1
votes

In the header file, you have HIDDescriptor1 defined externally. So when you compile usb_function_hid.c, it will compile fine until you try to link it. Then, it cant find that symbol.

It seems that you have to define HIDDescriptor1 in your own code. Or else it is somewhere else in the source that you downloaded, and you need to link that in as well. But it surely isn't defined in the .c file.

EDIT:

I downloaded and installed the Microchip Application Libraries. There is no longer any mention of HIDDescriptor1 in any of the source. However, usb_function_hid.h details another structure that I assume is a replacement:

//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;

Browsing the example projects, there are many many HID projects, all which build just fine with the C18 compiler. I recommend downloading this library again; you may have an incomplete or older library. The highlighted project below is for the PIC18F14K50.

Microchip Application Libraries\USB\Device - HID - Keyboard\Firmware