[技术问答] HC32F072 RAM使用超过8K后,USB HID Keyboard就跑不动了

[复制链接]
2582|7
 楼主| Ansersion 发表于 2020-6-16 18:17 | 显示全部楼层 |阅读模式
本帖最后由 Ansersion 于 2020-6-16 18:24 编辑

自己的项目工程使用了FreeRTOS和keyboard hid,开发过程中发现:如果多创建几个FreeRTOS任务(多使用任务堆栈——RAM)USB HID就跑不动,具体表现如下图
yyy.png

于是我用了官方HID KEYBOARD例程在评估板上跑,预分配8K RAM(0x2000),编译器优化等级None,如下图所示:
xxx.png zzz.jpg
同样是出现上面的问题。如果改成6K RAM(0x1800)描述符可以请求成功,但是按评估版上的按键无反应。如果改成5K RAM(0x1400),则运行正常。
求教哪位大神给点指引

例程路径:hc32f072_ddl_Rev1.1.1\example\usb\usb_keyboard\example\EWARM
caizhiwei 发表于 2020-6-16 18:51 | 显示全部楼层
本帖最后由 caizhiwei 于 2020-6-16 18:53 编辑

不应该呀?ram 有16kb,难道是假的?
caizhiwei 发表于 2020-6-16 18:52 | 显示全部楼层
liaotian001 发表于 2020-6-16 19:17 | 显示全部楼层
USB控制器有2种访问存储空间的方式:
1. DMA模式,  USB作为AHB Master,直接访问存储空间, 速度快,但是目前访问地址被限制在SRAM8K, FLASH64K
2. SLAVE模式,USB作为AHB Slave, 通过CPU间接访问存储空间,相比Master速度慢一点,但是访问地址不会受限。
 楼主| Ansersion 发表于 2020-6-17 10:24 | 显示全部楼层
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:27 | 显示全部楼层
本帖最后由 wangjia@ic 于 2020-6-18 10:28 编辑

您好,您这个可以如下解决:
对于大数组的定义,首先留给USB一个连续的RAM空间,定义一下大数组的起始地址,比如现在这个开发板上MCU的寻址范围是16K,您可以查看一下工程文件里面的“      .map”文件,看看与USB相关的最有一个使用ram的变量,然后根据该变量大小算一下下一个可以使用的地址,以这个地址作为大数组的起始地址,这个地址也可以往后推,只要不超过最大ram空间。比如您这个数组的起始地址指定为0x20002000,可以如下定义:
uint8_t xxx[8000]  __attribute__ ((at(0x20002000)));
 楼主| Ansersion 发表于 2020-6-18 14:08 | 显示全部楼层
wangjia@ic 发表于 2020-6-18 10:27
您好,您这个可以如下解决:
对于大数组的定义,首先留给USB一个连续的RAM空间,定义一下大数组的起始地址 ...

666,RTOS堆栈占住后8K的RAM就可以了
lorinislorinis 发表于 2021-6-4 10:32 | 显示全部楼层
你好,官网目前下载的资料包里已删掉了USB的例程,麻烦帮忙发一下USB的例程可以吗,非常感谢!5548986@qq.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

72

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部