HC32F072 RAM使用超过8K后,USB HID Keyboard就跑不动了
本帖最后由 Ansersion 于 2020-6-16 18:24 编辑自己的项目工程使用了FreeRTOS和keyboard hid,开发过程中发现:如果多创建几个FreeRTOS任务(多使用任务堆栈——RAM)USB HID就跑不动,具体表现如下图
于是我用了官方HID KEYBOARD例程在评估板上跑,预分配8K RAM(0x2000),编译器优化等级None,如下图所示:
同样是出现上面的问题。如果改成6K RAM(0x1800)描述符可以请求成功,但是按评估版上的按键无反应。如果改成5K RAM(0x1400),则运行正常。
求教哪位大神给点指引
例程路径:hc32f072_ddl_Rev1.1.1\example\usb\usb_keyboard\example\EWARM
本帖最后由 caizhiwei 于 2020-6-16 18:53 编辑
不应该呀?ram 有16kb,难道是假的? USB控制器有2种访问存储空间的方式:
1. DMA模式,USB作为AHB Master,直接访问存储空间, 速度快,但是目前访问地址被限制在SRAM8K, FLASH64K
2. SLAVE模式,USB作为AHB Slave, 通过CPU间接访问存储空间,相比Master速度慢一点,但是访问地址不会受限。
liaotian001 发表于 2020-6-16 19:17
USB控制器有2种访问存储空间的方式:
1. DMA模式,USB作为AHB Master,直接访问存储空间, 速度快,但是 ...
多谢
请问具体要怎么操作,有没有相关文档。
本人尝试:
第一我尝试切换到SLAVE模式,我把usb_conf.h中USB_OTG_HS_INTERNAL_DMA_ENABLED注释掉,并不成功;
第二我尝试把usb库文件里的所有变量都@到0x20002000以下的地址,结果也没有成功 本帖最后由 wangjia@ic 于 2020-6-18 10:28 编辑
您好,您这个可以如下解决:
对于大数组的定义,首先留给USB一个连续的RAM空间,定义一下大数组的起始地址,比如现在这个开发板上MCU的寻址范围是16K,您可以查看一下工程文件里面的“ .map”文件,看看与USB相关的最有一个使用ram的变量,然后根据该变量大小算一下下一个可以使用的地址,以这个地址作为大数组的起始地址,这个地址也可以往后推,只要不超过最大ram空间。比如您这个数组的起始地址指定为0x20002000,可以如下定义:
uint8_t xxx__attribute__ ((at(0x20002000))); wangjia@ic 发表于 2020-6-18 10:27
您好,您这个可以如下解决:
对于大数组的定义,首先留给USB一个连续的RAM空间,定义一下大数组的起始地址 ...
666,RTOS堆栈占住后8K的RAM就可以了 你好,官网目前下载的资料包里已删掉了USB的例程,麻烦帮忙发一下USB的例程可以吗,非常感谢!5548986@qq.com
页:
[1]