2

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

我正在使用 Microchip 网站上的一些标准文件。这是我的 C 文件这是我的头文件

构建时出现以下错误:

执行:"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。我不确定为什么它不会链接。我认为要么它是为另一个版本的编译器设计的,要么我缺少一些外部依赖项,或者我缺少一些编译器/链接器开关。

关于我需要做什么来构建它的任何想法?

4

1 回答 1

1

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

看来您必须HIDDescriptor1在自己的代码中定义。否则它位于您下载的源代码中的其他位置,您也需要将其链接。但它肯定没有在 .c 文件中定义。

编辑:

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

于 2012-05-18T16:24:59.500 回答