Microchip PIC的USB HID代码中的链接器错误(MPLAB / C18)

时间:2012-05-18 02:31:38

标签: usb hid microchip mplab c18

我正在尝试编译一些基本USB HID功能的代码。我正在使用带有MPLAB 8.43的PIC18F14K50和Microchip C18编译器。

我正在使用Microchip网站上的一些标准文件。 Here is my C filehere is my header file

我在构建时遇到以下错误:

  

执行:“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,链接器

     

设备数据库版本1.3

     

版权所有(c)1998-2011 Microchip Technology Inc.

     

错误 - 无法在文件'./usb_function_hid.o'中找到符号'HIDDescriptor1'的定义。

     

错误:1

     

链接步骤失败。

HIDDescriptor1符号出现在代码的2个位置:C文件的PasteBin第173行和头文件的PasteBin第356行。

此代码直接来自Microchip。我不确定为什么它不会链接。我认为它是为另一个版本的编译器设计的,我缺少一些外部依赖,或者我缺少一些编译器/链接器开关。

关于我需要做些什么来构建它?

1 个答案:

答案 0 :(得分:1)

在标头文件中,您在外部定义了HIDDescriptor1。因此,当您编译usb_function_hid.c时,它将正常编译,直到您尝试链接它。然后,它找不到那个符号。

您似乎必须在自己的代码中定义HIDDescriptor1。或者它是您下载的源中的其他位置,您也需要将其链接。但它肯定没有在.c文件中定义。

编辑:

我下载并安装了Microchip Application Libraries。在任何来源中都不再提及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 Application Libraries\USB\Device - HID - Keyboard\Firmware