发布于6月前
发布于1年前
🙂感谢@道友 回复。
最近研究了下GD32F470芯片手册,发现标称的内存512KB, 其实是连TCMSRAM一起算的,即TCMSRAM+SRAM0+SRAM1+SRAM2+ADDSRAM = 512KB, 其中SRAM0 - ADDSRAM 这段内存地址是连续的,从地址0x20000000开始。而TCMSRAM地址却是从0x10000000 - 0x1000FFFF, 即64KB。如下图:
所以第一个连续内存只能写448KB。GD32F450芯片也是有类似同上的分存分布。相当于存在两个内存堆了,目前使用RT-thread 提供的memheap 多内存堆使用方法,在 broad.c文件手动加上TCMSRAM初始化,经测试可以正常使用。
部分代码如下:
测试函数:
测试效果图:
发布于1年前
感谢各位应答,摸索了下,发现程序已经自带有应答状态返回了,稍利用一下就解决了,session->resp_status 这个就是应答状态码主要有以下代码:
200 OK //客户端请求成功
206 Partial Content //服务器已经成功处理了部分 GET 请求
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求
, 我主要是判断文件是否存在,因此判断404这个状态码就可以,在函数webclient_shard_head_function()之后加上以下判断代码即可。
修改后部分代码如下:
修改后效果:
发布于2年前
解决了,flash擦写函数没弄好,👌。
发布于2年前
解决了,换个字体就行,应该是字体的问题😐
发布于2年前
去掉软件包,重新加入软件包就可以了,具体是什么问题引起,我也不太清楚,大家碰到时不防试试这个方法😆,后面等有空再去研究下是啥问题引起的。
发布于2年前
是控制两个半桥的控制有刷电机。,看了管脚资料是有两路PWM,但LCD也已经用了,SPI又外接了flash, 其它IO倒时足够。看来也只能增加单片机才才行了,
发布于4年前
分区分错了吧, 最大512K , param 那里应该从0x64000开始刚好512K,如果从0x74000开始就超过了512K了.
发布于4年前
之前祼机编程时,在发送数据之前都会清空接收缓冲如下代码:
如果不清空,那么这前的数据会保留:
如之前有数据在接收缓冲区123,
那再次收到时数据时变成 123456,
显然,有时候我们不想这样,因为新的接收一帧是错误的,本来接收456数据才是正确。这对一问一答的协议非常不好,只有问了才应答,不问时,却收到了数据则要丢弃。
目前查看了源码并未有清除函数操作。但可以用读取函数来清空缓冲,效率可能低了些,经过测试,性能稳定。
读取接收清空操作:rt_device_read(serial, 0, buf,0,config.bufsz);
其中config.bufsz
初始化时设置是接收最大接收量。
在中断回调函数里使用邮箱,邮箱只容纳一个邮件,邮件发送数据为串口DMA空闲接收到的一包数据的字节数量。经过优化后程序如下:
通过以上代码实现了祼机编程思路,如果觉得有用,可以参考,有写得不好,欢迎大家拍砖。
发布于4年前
看打印信息偏移地址写错了,应该改为0x80000
发布于4年前
大家好,通过调试打印输出已经找到问题的所在了,主要是在第一次读取端点0数据返回的wMaxPacketSize = 8
, rtthread这个表达式,
实际赋值 8 = (18 > 8)? 8:18
,因此发送的只是请求返回前8个字节的设备描述符,使得出现返回的只有8个字节, 和读取18个字节
的设备描述符对不上,打印出get full device descriptor failed
,
而U盘之所以能正常是因为第一次读取端点0数据返回wMaxPacketSize = 64
, 实际赋值 18 = (18> 64)? 64:18
,即send_size = 18
,
因此能正常读回完整的设备描述符. 通过读读取全部设备描述符时增加测试debug_dat
代码人为更改send_size = 18
, 可以读取
全部设备描述符了.,
官方的USB HOST U盘程序 只能枚举wMaxPacketSize > 18
字节的,小于的话,像鼠标类8字节会枚举失败。:)
问 移植canopen CanFestvial 在上电初始化时,开402例程,can接收线程挂掉了,什么问题引起的呢