1. 场景分析,主要问题就是有些操作返回+CIS ERROR: 50

2. 看了一下在AT+MIPLOBSERVERSP这个指令里面是没有返回+CIS ERROR: 50的错误类型的,所以应该是在解析这个AT指令之前出现的,那么为啥会出现,猜测一,模块进入睡眠,唤醒之后第一个串口字符丢失,但是用自己的板子测试,这个概率并不高,客户测试几乎100%出现,猜测二,就是外部MCU进入睡眠之后改变RX的电平,所以接收数据多了一个上升沿或者下降沿,还有就是AT+MIPLNOTIFY的时候出现的,暂时没发现下面的指令有什么区别。

3. 在app_at.h里面出现50错误的有三种情况,我觉的有必要进一步区分这三种情况,所以进行了修改,其中有一个问题需要注意,如果没有这个AT指令的话,那么回复的就是50错误,我猜测下面AT_RET_NOT_NUMERIC的意思就是找不到AT指令,不过好像是不是数字的意思。下面第3个是语法错误

    {AT_RET_NOT_NUMERIC, },     //Incorrect parameters
{AT_RET_PARAM_MISSING, }, //Incorrect parameters
{AT_RET_SYNTAX_ERROR, }, //Incorrect parameters

修改完之后测试一下,首先是非数字看是否能测试到,首先是字符问题

[::44.372]发→◇AT+CGSN=

[::44.386]收←◆
+CGSN: OK [::48.004]发→◇AT+CGSN=A

[::48.016]收←◆
[::48.068]收←◆
+CIS ERROR:

然后是

[::58.380]发→◇AT+CGS2N=

[::58.393]收←◆
+CIS ERROR:

继续测试,所以目前猜测,之前的错误很有可能就是这个53,语法错误

[::33.091]发→◇AT+MIPLOP

[::33.103]收←◆
+CIS ERROR: [::36.709]发→◇AT+MIPLOP1EN=,

[::36.730]收←◆
+CIS ERROR:

3. 目前唯一新添加的就是低功耗,难道和低功耗有关?会不会是上一次的指令没执行完,低功耗之后继续执行,然后此时又来了一条AT指令?正成的测试,发现注册会失败,只能到连接成功,都是注册成功的一直没下发下来。难道是保存参数的数组不够11个?现在很有可能是AT指令没查找到,估计那个字符出错了,验证一下NOTIFY还没完成的时候,继续下一条NOTIFY。接下来使用SecureCRT软件,测试更高的波特率,看是回复什么?之前用STM32的时候用内部晶振,9600波特率是有问题的。不过波特率有偏差的话,那么为啥只有第5条NOTIFY才有问题?所以当时屏蔽了这个想法.

4. 有可能存在一种情况,在进入PSM之后,波特率的容限率低了很多。等待进入PSM模式,PSM模式,串口应该也是休眠状态,目前猜测53应该就是之前的50。据说,STM32使用内部LSI时钟作为串口9600波特率时钟源,那么在温度高和低的时候,波特率差别很大,目前猜测是这个问题,但是好好的温度怎么上升了?难道芯片运行一段时间之后,消耗电量温度上升?

5. 看下下面的例程,我感觉就是有的时候,模组唤醒之后,第一条指令不能正确识别,应该是海思SDK的底层问题。

6. 产生了一个问题,比如超时时间是1个小时,那么1个小时到之前必须更新注册。如果在1个小时到之前NOTIFY的话,不算更新注册。

7. 下面一个问题,写资源、写实例和预期回复不一样。看下图实际回复

预期回复

8. 观察资源和预期回复不一样,取消观察资源没测。

代码写错误

sprintf(rsp_string, "+MIPLOBSERVE:%d,%d,%d,%d,%d,%d", ref_id, msgid, observe_flag, oid, 
CIS_URI_IS_SET_INSTANCE(&node->uri)?node->uri.instanceId:-,CIS_URI_IS_SET_RESOURCE(&node->uri)?node->uri.resourceId:-); //早先错误的写法
sprintf(rsp_string, "+MIPLOBSERVE:%d,%d,%d,%d,%d,%d", ref_id, msgid, observe_flag, oid,
CIS_URI_IS_SET_INSTANCE(&node->uri)?node->uri.instanceId:-,CIS_URI_IS_SET_RESOURCE(&node->uri)?node->uri.instanceId:-);

16. 任务阻塞失败?

TaskHandle_t udp_recv_task_handle  = NULL;
xTaskCreate( callbackRecvThread, "onenet_udp_recv", , (void *)ctx, TASK_PRIORITY_ONENET, &udp_recv_task_handle );
vTaskSuspend(udp_recv_task_handle);

难道是第一的notify其实还没有开启UDP的接口和发送部分,不是的。任务名字太长?

#define configMAX_TASK_NAME_LEN                 10 

顺便发现了FreeRTOS可裁剪的配置FreeRTOSConfig.h

#define configUSE_NEWLIB_REENTRANT              0               // Not adding a feature packed c library
//#define configMINIMAL_STACK_SIZE 128 <- Moved to platform specific configuration
#define configMAX_PRIORITIES 10 // This sizes an array so should be kept small.
#define configUSE_PREEMPTION 1
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 0
#define configUSE_16_BIT_TICKS 0
#define configUSE_CO_ROUTINES 0 #define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetIdleTaskHandle 0
#define INCLUDE_xTaskAbortDelay 0
#define INCLUDE_xQueueGetMutexHolder 0
#define INCLUDE_xSemaphoreGetMutexHolder 1
#define INCLUDE_xTaskGetHandle 0
#define INCLUDE_uxTaskGetStackHighWaterMark 1
#define INCLUDE_eTaskGetState 0
#define INCLUDE_xTaskResumeFromISR 1 // Enabled by default in FreeRTOS.h
#define INCLUDE_xTimerPendFunctionCall 1
#define INCLUDE_xTaskGetSchedulerState 1
#define INCLUDE_xTaskGetCurrentTaskHandle 1 #define configMAX_CO_ROUTINE_PRIORITIES 0 // Must be greater or equal to 1 if configUSE_CO_ROUTINES is enabled.
#define configUSE_DAEMON_TASK_STARTUP_HOOK 0 // See also IOT-5451
#define configUSE_APPLICATION_TASK_TAG 0
#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 0
#define configUSE_RECURSIVE_MUTEXES 1
#define configUSE_MUTEXES 1
#define configUSE_TIMERS 1
#define configUSE_COUNTING_SEMAPHORES 1
#define configUSE_ALTERNATIVE_API 0 /* Deprecated, and now removed from FreeTROS 9. */
#define portCRITICAL_NESTING_IN_TCB 0
#define configMAX_TASK_NAME_LEN 10 // Allow 10 characters for task names
#define configIDLE_SHOULD_YIELD 1

在后来的版本,只修改过BS和非BS合在一起,难道和这个有关?难道开启BS的话,是创建了2个UDP的接收任务?经过测试发现,非BS的版本确实可以进入低功耗,因此应该是建了2个UDP的接收任务,已经确认应该是建立了2个任务。所以删除任务的时候删除两次。

onenet基础通信套件返回+CIS ERROR: 50的问题解决的更多相关文章

  1. NB-IOT使用LWM2M移动onenet基础通信套件对接之APN设置

    1. 先搞懂APN是做什么的?APN指一种网络接入技术,是通过手机上网时必须配置的一个参数,它决定了手机通过哪种接入方式来访问网络.对于手机用户来说,可以访问的外部网络类型有很多,例如:Interne ...

  2. 移动onenet基础通信套件V1.08版本的AT指令测试

    1. 本次测试版本V1.08,AT+MIPLCREATE,首先需要一个配置文件.该指令创建一个基础通信套件的实例 2. 看下CGFID=2的配置,这个连接类型,UDP是1还是0?用户名和密码是什么?哪 ...

  3. onenet基础通信套件加B300移植

    1. 遇到的第一个问题,说是少了文件,但是明明有这个文件的啊? scons: warning: Ignoring missing SConscript 'build_scons\arm\Hi2115\ ...

  4. NB-IOT移植移动onenet基础通信套件之Object_ID,实例ID,资源ID

    1. 访问是按照分层的,Object_ID/实例ID/资源ID,对应每一层ID的数据类型,目前是分为3层,一个实例下面可以有多个实例id,对下面的数据结构来说,如果是资源ID的话,类型只能是asBuf ...

  5. springboot - 返回xml error 从自定义的 ErrorController

    1.概览 2.在<springboot - 返回JSON error 从自定义的 ErrorController>基础上,做如下调整: 1).新增Attribute类和Error类 pac ...

  6. iis 使用 LocalDB 报错:provider: SQL Network Interfaces, error: 50

    在使用asp.net core读取localdb数据库时,报以下错误: 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 S ...

  7. SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例。

    今天在用VS2013自带的LocalDB调整数据库时出错,在网上也搜到许多方案,如卸载SQLServer LocalDB的程序.重新创建实例等都没有解决我的问题,也重新修改以及修复Vs,问题依旧存在, ...

  8. 为什么选择Netty作为基础通信框架?

    在开始之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果两个多月过去了,他们的NIO服务端始终无法稳定,问题 ...

  9. 《挑战30天C++入门极限》C++运算符重载函数基础及其值返回状态

        C++运算符重载函数基础及其值返回状态 运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观. 对于普通对象来说我们很自然的会频繁使用算数运 ...

随机推荐

  1. 面条代码 vs. 馄沌代码

    转载自:https://blog.csdn.net/godsme_yuan/article/details/6594013

  2. SPOJ MUSKET - Musketeers

    黑书P117页. 要是不看解析,确实不要算和定义状态. 把环看成链,是指把这个1234512345,写两边,然后怎么表示一个人是否胜利了呢?其实就是其他人全部死光(好像等于没说): 考虑最后一次杀人, ...

  3. 【[USACO16OPEN]262144】

    发现这个数列的范围特别大但是值域的范围特别小 于是可以大胆猜测这道题值域肯定需要开到状态里去 又发现\(262144=2^{18}\)这个暗示非常明显啊,暗示这道题跟二进制有关系 其实也没什么关系 设 ...

  4. 行高 line-height

    一.行高的定义 line-height(行高):两行文字基线之间的距离 1.什么是基线? 2.为何是基线? 3.需要两行吗? 1.什么是基线? 我们上学的时候都用过,抄写英文字母的时候.其中有一条红线 ...

  5. 【转】Mac本地生成SSH Key 的方法

    1. 查看秘钥是否存在 打开终端查看是否已经存在SSH密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除,   也可以直接删除, 2.生成新的秘钥, 命令如下 $ssh-keygen ...

  6. HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1110 Equipment Box Time Limit: 2000/1000 MS (Java/Oth ...

  7. UGUI防止点击穿透

    if (!IsPointerOverGameObject(Input.mousePosition)) { } public static bool IsPointerOverGameObject(Ve ...

  8. dedecms基础整理,

    需求3: 在添加某个商品的时候,我们希望多一个信息,就是付费方式,还希望多一个邮资信息,我们又该怎样处理? 引出修改内容模型的问题 每个模型的字段管理的所有信息 都属于附加表. 步骤: 点击 核心-& ...

  9. iOS之苹果调整 App Store 截图上传规则,截图尺寸、大小等

    作者:ASO100链接:https://zhuanlan.zhihu.com/p/23041522来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 自从 8 月中旬苹果向 ...

  10. 如何在match中使用正则表达式

    这是在实现搜索功能的时候遇到的一个问题,在搜索的场景中,会根据搜索框中输入的内容,匹配出包含搜索内容的部分.简单模拟还原使用场景: 首先定义一个遍历 value 用来接收输入的内容 var value ...