shadowliang
shadowliang

注册于 2 years ago

回答
19
文章
8
关注者
0

楼主的疑问可以再阅读一下文档中心中关于内核章节中线程间通信的内容,里面有你想要的答案。:lol

楼主,spi_flash_device.geometry.block_size = 4096; /* block erase: 4k */这里的 block_size 是指擦除块的大小为 4K ,就是说按 4K 大小来擦除。

看起来真的很玄学,楼主不如先单独测试玄学的两条指令,然后再执行st7789_example这个指令,定位一下问题是由什么产生的。

楼主可以自己diy一个,基于web的上位机,大致思路是使用webnet软件包,实现web cgi,然后自定义一些http 请求交互的api,根据自己的需求设计一个web html布局,可以使用romfs把web html挂载到设备,然后就是发挥自己的想象了。

kuailedeluojie 发表于 2019-8-5 15:37
感谢关注和回复,ipv6的问题还没有得到解决,我的是用网线连接的也可以用WiFi通信的代码打印信息吗? ...


不知道楼主用的是什么板子呢?如果是stm32系列的板子,可以在bsp的下面drv_eth.c找到dump_hex的函数,通过开关//#define ETH_RX_DUMP来打印板子接收的网络数据,在该文件中的网络接收函数struct pbuf *rt_stm32_eth_rx(rt_device_t dev)里面添加判断是否接收到ipv6组播包的方法。

关于ipv6组播包是否被板子接收到,可以参考一下以下的方法,在网络的接收函数中,如果是使用wifi通信中的在drv_wlan.c文件中的ethernetif_input(int iface, struct pbuf *p)函数中的相关位置添加以下代码,打印网络接收数据的来源mac和目的的mac地址,如果是ipv6的组播包,第48bit是1就表示组播地址,mac的目的地址的第一个字节一般是0x33.

/* points to packet payload, which starts with an Ethernet header */
ethhdr = p->payload;

if (ethhdr->dest.addr[0] && 0x01)
{
rt_kprintf("\r\n [src_mac:%02x %02x %02x %02x %02x %02x ]", ethhdr->src.addr[0], ethhdr->src.addr[1], ethhdr->src.addr[2], ethhdr->src.addr[3], ethhdr->src.addr[4], ethhdr->src.addr[5]);
rt_kprintf("[dst_mac:%02x %02x %02x %02x %02x %02x ]\r\n", ethhdr->dest.addr[0], ethhdr->dest.addr[1], ethhdr->dest.addr[2], ethhdr->dest.addr[3], ethhdr->dest.addr[4], ethhdr->dest.addr[5]);

}

不知道楼主的问题解决了没,关于IPv6,最近刚好有接触到局域网接收IPv6组播包的需求,分享一下个人的实现方法仅供楼主参考一下。首先开启网络接收的调试打印,方便观察网络通信中接收到的信息,我使用的是无线的wifi,在drv_wlan.c中开启packet_dump功能,主要是通过
//#define MINI_DUMP
//#define ETH_RX_DUMP
//#define ETH_TX_DUMP,
这三个宏开关调试,具体可以阅读下相关bsp下的drv_wlan.c文件,
具体函数如下

static void packet_dump(const char *msg, const struct pbuf *p)
{
const struct pbuf *q;
rt_uint32_t i, j;
rt_uint8_t *ptr;

rt_kprintf("%s %d byte\n", msg, p->tot_len);

#ifdef MINI_DUMP
return;
#endif

i = 0;
for (q = p; q != RT_NULL; q = q->next)
{
ptr = q->payload;

for (j = 0; j < q->len; j++)
{
if ((i % 8) == 0)
{
rt_kprintf(" ");
}
if ((i % 16) == 0)
{
rt_kprintf("\r\n");
}
rt_kprintf("%02x ", *ptr);

i++;
ptr++;
}
}

rt_kprintf("\n\n");
}
#endif /* dump */



又get一项新的技能,感觉楼主分享:lol.

楼主,可以试试单独调试按键是否正常,或者是用命令行调试,观察哪里出了问题.

厉害厉害,正疑问着rt-robots 软件包应该怎样用呢。感谢楼主分享。

楼主,从代码上看,你的pd12好像不是pwm的输出信号引脚,你的pd12只是配置了一个输出模式,关于pwm信号,你的是配置了channel1,应该看看pwm channel1是哪个引脚的。

学习了,期待楼主的更多分享。

发布
问题