1.调用沁恒 USB读取接口 读不到数据
static bool CH37XASyncReadData(int iIndex, uint32_t epindex, void *oBuffer, uint32_t *ioLength)
{
struct _bulkUp {
uint32_t len;
uint8_t epindex;
uint8_t data[0];
} __attribute__((packed));
struct _bulkUp *bulkUp;
int retval;
bulkUp = (struct _bulkUp *)malloc(sizeof(struct _bulkUp) + *ioLength);
bulkUp->len = *ioLength;
bulkUp->epindex = epindex;
retval = ioctl(gusbch37x.bfdops ? iIndex : gusbch37x.fds[iIndex], CH37X_BULK_ASYNC_READ, (unsigned long)bulkUp);
if (retval < 0) {
printf("CH37XASyncReadData retval %d\n",retval);
goto exit;
}
*ioLength = bulkUp->len;
memcpy((uint8_t *)oBuffer, bulkUp->data, bulkUp->len);
exit:
free(bulkUp);
return retval == 0 ? true : false;
}
底层应该是len =read (fd,buf,len);
我len =0;,傻逼了
数据读取丢包现象
由于采用两个线程一个从usb读数据一个写入到文件,线程挂起时间均为1S,自测发现有丢包现象,减小挂起时间直接收不到数据,好家伙,写了一个大bug,从mcu端查看发送端,发现接收到的数据就已经丢了,后来结合log推测是read 文件后调用usb wirte少写了,推测写数据没有结束,线程切换了,导致丢包
后来发现是我自己应用层软件写的有问题
应用层采用互斥锁+条件变量 来实现生产者消费者模式,但是由于我用于读取USB数据写到文件的临界缓存buffer 只设置80K,而且读取数据的最大也是80K,就导致缓存覆盖问题
最后采用ringbuffer的方式来解决问题
2 麒麟 error adding symbols file in wrong format
网上百度一下 得知可能是库加载有问题,涉及编译环境
反思:我直接拷贝工程,工程是在ubuntu 22下
查询本地:本地是麒麟
尝试:ubuntu 删除编译生成文件,在麒麟下重新make ,通过
3 Ubuntu 终端 打不开
4 GDB 问题
4. 1 No symbol table is loaded. Use the “file” command.
编译时 未加 -g