前记

  c语言已经是一门经常吃饭的本领,本来是要有种看一眼,就知道哪儿出问题了才行,没想到,遇到实际问题的时候,才知道自己的修为不到家。还没有达到那种炉火纯青的境界。看来,不是这个世界没有机会,是自己的水平还有待提高啊。看来还是要好好积累吧。把不熟悉的知识点记录下来。做个备忘,免得后面再犯类似的错误。

实际例子:

  其实,这个while循环本来很简单的事情,没想到加在一堆代码中间,居然把我给绕了进去。下面看一下这个代码:

#include <stdio.h>

#define FRAME_LEN_HEAD 4

typedef unsigned char uint8_t;

static int cmd_rx_offset = 0;

void test_cmd(uint8_t *cmd_buffer_begin, int len)
{ int i = 0;
cmd_rx_offset = len; do
{
if ((*(cmd_buffer_begin + i + 0) == 0x89)
&& (*(cmd_buffer_begin + i + 1) == 0xAB)
&& (*(cmd_buffer_begin + i + 2) == 0xCD)
&& (*(cmd_buffer_begin + i + 3) == 0xEF))
{
printf("find the right cmd break:%d\n",i);
break;
} // i++;
}
while (i++ < (cmd_rx_offset - FRAME_LEN_HEAD)); printf("bb cmd_rx_offset:%d \n",cmd_rx_offset);
cmd_rx_offset -= i;
printf("cc cmd_rx_offset:%d \n",cmd_rx_offset); } int main()
{
uint8_t testa[20] = {0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0x10,0x11,0x12,0x13,0x14,0x15,0x88,0x88,0xAB,0xCD,0xEF}; test_cmd(testa,20); return 0;
}

错误在哪儿?这个函数返回值一直是这样的:

bb cmd_rx_offset:20

cc cmd_rx_offset:3

由于当初把while循环中的++计算错误,导致我的计算一直不对,后来把代码摘出来,反复查看并验证,才知道问题是出在这里了。

c代码中while循环的一个死机问题引发的思考的更多相关文章

  1. PHP 中for循环的一个小小改进

    注意 : 1, $size这个值可以放在for循环中的第一个 ';' 前声明, 因为这个声明只会执行一次; 2, 第二个 ';' 中的内容, 会重复运行, 所以$i < $size 这个判断会每 ...

  2. 今天代码中接触到了一个新的东西。js的上下自动滚动,无缝对接。

    js的上下自动滚动,无缝对接.为什么会用到这个东西呢?因为我在做公司的官网项目的修改的时候.有一个产品介绍的页面,会有很多的产品出现在,中间部分的列表里.但是又不能够使用分页.所以我就在想如果,列表数 ...

  3. Keil代码中for循环延时问题

  4. 一个简单算法题引发的思考<DNA sorting>(about cin/template/new etc)

    首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自 ...

  5. C# 一个计算器功能实现引发的思考

    一.需求 计算器功能需求,这个众所周知,很明确了. 二.步骤分析 1)初级实现计算器 static int Calculator(int a,int b,string str) { switch(st ...

  6. scala学习手记2 - scala中的循环

    先来看一段Java中的循环: for (int i = 1; i < 4; i++) { System.out.print(i + ","); } 毫无疑问,scala可以让 ...

  7. [译]Python中的异步IO:一个完整的演练

    原文:Async IO in Python: A Complete Walkthrough 原文作者: Brad Solomon 原文发布时间:2019年1月16日 翻译:Tacey Wong 翻译时 ...

  8. php代码中注释的含义

    最近在梳理和优化手上的项目代码,这个项目已经走过好几任了,每一任的开发人员多多少少都有一些差异和各自的习惯,所以代码逻辑和写法上都有点[乱]. 在代码中,注释是一个非常重要的信息,更何况是接手其他人的 ...

  9. VirtualBox:启动虚拟机后计算机死机

    造冰箱的大熊猫@cnblogs 2018/2/21 故障描述:Ubuntu 16.04升级Linux内核后,在VirtualBox中启动虚拟机发现Ubuntu死机,只能通过长按电源开关硬关机的方式关闭 ...

随机推荐

  1. 第三章 学习Shader所需的数学基础(4)

    法线变换 法线(normal),也被称为法矢量(normal vector).在以前我们已经讲过如何使用变换矩阵来变换一个顶点或方向矢量,但法线是需要我们特殊处理的一种方向矢量.在游戏中,模型的顶点往 ...

  2. 了解 MongoDB 看这一篇就够了【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  3. AQS系列(二)- ReentrantLock的释放锁

    前言 在AQS系列(一)中我们一起看了ReentrantLock加锁的过程,今天我们看释放锁,看看老Lea那冷峻的思维是如何在代码中笔走龙蛇的. 正文 追踪unlock方法: public void ...

  4. Vue - 简单实现一个命令式弹窗组件

    前言 在日常工作中弹窗组件是很常用的组件,但用得多还是别人的,空闲时间就自己来简单实现一个弹窗组件 涉及知识点:extend.$mount.$el 使用方式: this.$Confirm({ titl ...

  5. Zabbix 监控PHP-FTPM、Tomcat、Redis应用

    一.zabbix 监控 PHP-FPM应用实战Nginx+PHP-FPM是目前最流行的LNMP架构,在基于PHP开发的系统下,对这些系统性能的监控,主要是关注PHP-FPM的运行状态,那么什么是PHP ...

  6. zabbix4.0.1 安装部署

    zabbix安装部署 目录 一.环境准备... 3 1.1.版本:... 3 1.2.部署环境... 3 二.安装部署... 3 2.1.zabbix安装... 3 2.1.1.下载zabbix的rp ...

  7. ARTS-S ansible-playbook

    文件a.yml --- - hosts: cluster remote_user: ksotest gather_facts: false tasks: - name: delete dir if e ...

  8. cs5642 v3摄像头拍照效果

    4个摄像头拍照效果 配置的是ov5642_960p_RAW 测试图片分别如下:

  9. K3cloud、erp系统实时滚动展示未处理数据,监控投诉处理进度

     痛点:企业内部erp人工记录产品投诉销售单,是否跟踪处理完客户投诉,结果不能实时透明,当天还有多少未解决的投诉单,也不能实时查看到,除非手工去系统单据查询,很不方便,跟踪也不顺畅!   解决方案:利 ...

  10. JS实现链式调用 a().b().c()

    function a() { this.b = function () { console.log('111') return this } this.c = function () { consol ...