打印
[技术问答]

HC32F072 RAM使用超过8K后,USB HID Keyboard就跑不动了

[复制链接]
1974|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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: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速度慢一点,但是访问地址不会受限。

使用特权

评论回复
5
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以下的地址,结果也没有成功

使用特权

评论回复
6
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)));

使用特权

评论回复
7
Ansersion|  楼主 | 2020-6-18 14:08 | 只看该作者
wangjia@ic 发表于 2020-6-18 10:27
您好,您这个可以如下解决:
对于大数组的定义,首先留给USB一个连续的RAM空间,定义一下大数组的起始地址 ...

666,RTOS堆栈占住后8K的RAM就可以了

使用特权

评论回复
8
lorinislorinis| | 2021-6-4 10:32 | 只看该作者
你好,官网目前下载的资料包里已删掉了USB的例程,麻烦帮忙发一下USB的例程可以吗,非常感谢!5548986@qq.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

72

帖子

4

粉丝