linux应用层编程问题--沙雕问题

1.调用沁恒 USB读取接口 读不到数据

c 复制代码
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

相关推荐
2301_809051144 小时前
Linux 网络编程 学习笔记
linux·网络·学习
wanhengidc4 小时前
服务器租用有何优点
运维·服务器·安全·web安全
ZGi.ai4 小时前
人工审查节点:让自动化工作流多一步人工把关
运维·人工智能·自动化·人机协同·智能体工作流·人工审查
坤昱4 小时前
cfs调度类深入解刨——最新内核细节分析2
linux·服务器·cfs·cfs调度·eevdf调度·eevdf·kernel 7.1
艾莉丝努力练剑4 小时前
【Linux:文件】Ext系列文件系统进阶
linux·运维·服务器·c++·文件系统·文件io·ext
海市公约4 小时前
Linux核心基础命令与权限管理实战指南
linux·运维·服务器·vim·权限管理·系统监控·命令行
eggcode5 小时前
【Qt学习】Linux(ARM架构)在线安装Qt6.x
linux·qt·学习·arm
wkd_0075 小时前
Ubuntu 22.04 Samba 连接故障排查记:从“用户名或密码错误”到 NTLM 版本不兼容
linux·运维·ubuntu
企服AI产品测评局5 小时前
Agent适配信创环境实测:企业级自动化如何实现国产操作系统与数据库全兼容?
运维·数据库·人工智能·ai·chatgpt·自动化
mixboot6 小时前
Linux 进程工作目录查看利器:pwdx 命令详解
linux·运维·服务器