域格模组openCPU下功能使用记录

系列文章目录


前言

这次文章记录的是平时支持客户openCPU遇到的功能问题,基本上都是基础的知识,记录下来就是为了提升经验,一些几年的工程师都会犯的错误。


一、文件系统的访问模式

问题错误:客户在模块开机直接对不存在的文件进行open和read操作,导致open和read操作失败错误示例如下:
在这里插入图片描述
记录点:面对不存在文件时要先进行写,以写的方式打开文件(如果文件存在则会清空文件,如果文件不存在则会创建文件)
在这里插入图片描述
示例如下:

if (flag_value & TASK_TIMER_CHANGE_FLAG_BIT) {
            fd = FDI_fopen("test_file", "wb");
            if (fd != 0){
                sdk_uart_printf("debug> open file for write OK\n");
                memset(temp, 0, 30);
                sprintf(temp,"Hello world! _%d",count);
                FDI_fwrite(temp, 20, 1, fd);
                FDI_fclose(fd);
            } else {
                sdk_uart_printf("debug> open file for write error\n");
            }
        } else if (flag_value & TASK_TIMER_CHANGE2_FLAG_BIT) {
            fd = FDI_fopen("test_file", "rb");
            if (fd) {
                sdk_uart_printf("debug> open file for read OK\n");
                memset(temp,0,30);
                FDI_fread(temp,30,1,fd);
                FDI_fclose(fd);
                sdk_uart_printf("debug> temp = %s", temp);
            } else {
                sdk_uart_printf("debug> open file for read error\n");
            }
        }

二、tcp重连机制

代码如下(示例):

 if (sock < 0) {
        sdk_uart_printf("_testsocket: connect error");
        return;
    }

    ret = send(sock, "abcdefg", 7, 0);
    if (ret != 7) {
        sdk_uart_printf("_testsocket: send error");
        close(sock);
        return;
    }
	FD_ZERO(&master);
	FD_ZERO(&read_fds);
	FD_SET(sock, &master);
	read_fds = master;

	if(select(fdmax, &read_fds, NULL, NULL, NULL) == -1) {
		fatal_printf("%s[%d], select error %d", __FUNCTION__,0,errno);
		OSATaskSleep(200);
	}
	//使用堵塞机制判断接收从而达到重连效果
    ret = recv(sock, buf, sizeof(buf) - 1, 0);
    if (ret <= 0) {
        sdk_uart_printf("_testsocket: recv error: %d", ret);
        close(sock);
        return;
    }
    buf[ret] = '\0';
    sdk_uart_printf("_testsocket: data: %s", buf);
    close(sock);

三、双卡切换

客户使用双卡功能切换卡之后,切换后的卡显示无信号状态但是网络可以注册,问题复现情况:
在这里插入图片描述
卡切换之后需要初始化,可以等初始化结束之后,信号才会显示,可以加在注册之后
在这里插入图片描述

设置主卡副卡代码如下:

	ret = getMasterSimID();//获取当前主卡信息
		catstudio_printf("%s: getMasterSimID ret %d\n",__FUNCTION__,ret);

		if (isMasterSim0()){//判断卡查询注册状态
			ret = SendATCMDWaitResp(TEL_AT_CMD_ATP_10, at_str, 3, NULL,1,NULL, resp_str, sizeof(resp_str));
		}else{
			ret = SendATCMDWaitResp(TEL_AT_CMD_ATP_10+36, at_str, 3, NULL,1,NULL, resp_str, sizeof(resp_str));
		}
		catstudio_printf("%s: resp_str = %s, ret = %u\n",__FUNCTION__,resp_str,ret);
		
		OSATaskSleep(1000);
		
		ret = getMasterSimID();
		catstudio_printf("%s: getMasterSimID ret %d\n",__FUNCTION__,ret);

		if (isMasterSim0()){
			ret = SendATCMDWaitResp(TEL_AT_CMD_ATP_10, at_str, 3, NULL,1,NULL, resp_str, sizeof(resp_str));
		}else{
			ret = SendATCMDWaitResp(TEL_AT_CMD_ATP_10+36, at_str, 3, NULL,1,NULL, resp_str, sizeof(resp_str));
		}
		catstudio_printf("%s: resp_str = %s, ret = %u\n",__FUNCTION__,resp_str,ret);

		ret = CM_SetMasterSimID((CMSimID)CM_SIM_0, switch_sim_done);
//设置主卡副卡
		if (ret != 0){
			catstudio_printf("%s: CM_SetMasterSimID ret %d\n",__FUNCTION__,ret);
		}	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值