VxWorks操作系统复位实战(三)[by Progsoft]

本文探讨了一种由于While循环导致的通讯协议解析死循环问题。在VxWorks操作系统环境下,解析包含递归TAG的数据结构时,程序可能会陷入错误的循环。文中介绍了该数据结构的组成,并假设了某些条件,如TAG和LEN已知,内容存储在特定缓冲区。然而,这样的编程方式可能导致意料之外的行为,暗示了潜在的编程错误。下文将揭示这些错误并提出解决方案。
摘要由CSDN通过智能技术生成

该死的While循环 

本文将列举一个使用While循环导致死循环的实例。

但凡看过一点通讯协议的人对以下的数据结构应该不会陌生:

+-----------------+
|    tag_1        |
+-----------------+
|    len_1        |
+---+-------------+
| c |  tag_1.1    |
+   +-------------+
| o |  len_1.1    |
+   +-------------+
| n |  content_1.1|
+   +-------------+
| t |  tag_1.2    |
+   +-------------+
| e |  len_1.2    |
+   +-------------+
| n |  content_1.2|
+   +-------------+
| t |  ......     |
+   +-------------+
| 1 |  ......     |
+---+-------------+
具体举例如下:

该数据结构在某协议的定义里面是这样的。

TAG 是 1个字节,从0~0xFF,表明某数据的类型

LEN 是 1个字节,表明该数据的总长度(包括TAG+LEN+CONTENT)

CONTENT 数据内容的长度根据LEN来确定。

其中某种TAG的内容字段,可能是包涵其他N个TAG及其内容。(N值一般没有显式定义)

对照这个图我们可以看到:

TAG1 就包涵有TAG1.1、TAG1.2 ...

那么我们程序一般会怎么写呢?

为使程序简单,我们先做一些假设:
1、TAG1已解码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值