Просмотр исходного кода

update usbh_class info section

sakumisu 3 лет назад
Родитель
Сommit
0bbced8733

+ 4 - 4
core/usbh_core.c

@@ -826,10 +826,10 @@ int usbh_initialize(void)
     usbh_class_info_table_begin = (struct usbh_class_info *)&usbh_class_info$$Base;
     usbh_class_info_table_end = (struct usbh_class_info *)&usbh_class_info$$Limit;
 #elif defined(__GNUC__)
-    extern uint32_t _usbh_class_info_start;
-    extern uint32_t _usbh_class_info_end;
-    usbh_class_info_table_begin = (struct usbh_class_info *)&_usbh_class_info_start;
-    usbh_class_info_table_end = (struct usbh_class_info *)&_usbh_class_info_end;
+    extern uint32_t __usbh_class_info_start__;
+    extern uint32_t __usbh_class_info_end__;
+    usbh_class_info_table_begin = (struct usbh_class_info *)&__usbh_class_info_start__;
+    usbh_class_info_table_end = (struct usbh_class_info *)&__usbh_class_info_end__;
 #endif
 
     usbh_core_cfg.pscevent = usb_osal_event_create();

+ 1 - 1
core/usbh_core.h

@@ -60,7 +60,7 @@ extern "C" {
 
 #define CLASS_CONNECT(hport, i)    ((hport)->config.intf[i].class_driver->connect(hport, i))
 #define CLASS_DISCONNECT(hport, i) ((hport)->config.intf[i].class_driver->disconnect(hport, i))
-#define CLASS_INFO_DEFINE          __attribute__((section("usbh_class_info"))) __USED __ALIGNED(1)
+#define CLASS_INFO_DEFINE          __attribute__((section(".usbh_class_info"))) __USED __ALIGNED(1)
 
 enum usbh_event_type {
     USBH_EVENT_CONNECTED = (1 << 0),

+ 15 - 4
docs/source/quick_start/other_chip.rst

@@ -25,15 +25,26 @@ USB Host 移植要点
 - 拷贝 `usb_config.h` 文件到自己工程目录下,并添加相应的目录头文件路径。所以根目录下的文件仅作为参考,不要添加根目录下的头文件路径
 - 实现 `usb_hc_low_level_init` 函数(该函数主要负责 USB 时钟、引脚、中断的初始化)。该函数可以放在你想要放的任何参与编译的 c 文件中。如何进行 USB 的时钟、引脚、中断等初始化,请自行根据你使用的芯片原厂提供的源码中进行添加。
 - 调用 `usbh_initialize` 初始化 usb 硬件
-- 如果使用的是 GCC,需要在链接脚本中添加如下代码:
+- 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码:
 
 .. code-block:: C
 
         /* section information for usbh class */
         . = ALIGN(4);
-        _usbh_class_info_start = .;
-        KEEP(*(usbh_class_info))
-        _usbh_class_info_end = .;
+        __usbh_class_info_start__ = .;
+        KEEP(*(.usbh_class_info))
+        __usbh_class_info_end__ = .;
+
+- 如果使用的是 Segger Embedded Studio ,需要在链接脚本(icf)中添加如下代码:
+
+.. code-block:: C
+
+        define region CHERRYUSB_RAM  = [from 0x1080000 + 700k size 68k];  /* reserve for cherryusb region */
+
+        define exported symbol __usbh_class_info_start__  = start of region CHERRYUSB_RAM;
+        define exported symbol __usbh_class_info_end__  = end of region CHERRYUSB_RAM + 1;
+
+        place in CHERRYUSB_RAM                   { section  .usbh_class_info };
 
 - 编译使用。各个 class 如何使用,参考 demo 下的 `usb_host.c` 文件
 

+ 9 - 0
docs/source/quick_start/rt-thread/rtthread.rst

@@ -57,6 +57,15 @@
 .. figure:: img/config_file.png
 
 * 使用 `scons --target=mdk` 或者 `scons` 进行编译
+* 如果使用的是 GCC ,需要在链接脚本(ld)中添加如下代码:
+
+.. code-block:: C
+
+        /* section information for usbh class */
+        . = ALIGN(4);
+        __usbh_class_info_start__ = .;
+        KEEP(*(.usbh_class_info))
+        __usbh_class_info_end__ = .;
 
 
 借助 STM32CubeMX 生成 USB 初始化