⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdu.lst

📁 一个用单片机实现gprs modem发送短信的程序.里面有详细的注释,不可多得的学习程序
💻 LST
字号:
CX51 COMPILER V7.20   PDU                                                                  09/10/2006 15:19:49 PAGE 1   


CX51 COMPILER V7.20, COMPILATION OF MODULE PDU
OBJECT MODULE PLACED IN pdu.OBJ
COMPILER INVOKED BY: D:\program\keil\C51\BIN\CX51.EXE pdu.c BROWSE DEBUG

line level    source

   1          
   2          #include "pdu.h"
   3          
   4          int gprsEncodePdu(const SM_PARAM* pSrc, char* pDst)
   5          {
   6   1              int nLength;                    // 内部用的串长度
   7   1              int nDstLength;                 // 目标PDU串长度
   8   1              unsigned char buf[256]; // 内部用的缓冲区
   9   1      
  10   1              // SMSC地址信息段
  11   1              nLength = strlen(pSrc->SCA);    // SMSC地址字符串的长度 
  12   1              buf[0] = (char)((nLength & 1) == 0 ? nLength : nLength + 1) / 2 + 1;    // SMSC地址信息长度
  13   1              buf[1] = 0x91;          // 固定: 用国际格式号码
  14   1              nDstLength = gprsBytes2String(buf, pDst, 2);            // 转换2个字节到目标PDU串
  15   1              nDstLength += gprsInvertNumbers(pSrc->SCA, &pDst[nDstLength], nLength); // 转换SMSC号码到目标PDU串
  16   1      
  17   1              // TPDU段基本参数、目标地址等
  18   1              nLength = strlen(pSrc->TPA);    // TP-DA地址字符串的长度
  19   1              buf[0] = 0x11;                                  // 是发送短信(TP-MTI=01),TP-VP用相对格式(TP-VPF=10)
  20   1              buf[1] = 0;                                             // TP-MR=0
  21   1              buf[2] = (char)nLength;                 // 目标地址数字个数(TP-DA地址字符串真实长度)
  22   1              buf[3] = 0x91;                                  // 固定: 用国际格式号码
  23   1              nDstLength += gprsBytes2String(buf, &pDst[nDstLength], 4);              // 转换4个字节到目标PDU串
  24   1              nDstLength += gprsInvertNumbers(pSrc->TPA, &pDst[nDstLength], nLength); // 转换TP-DA到目标PDU串
  25   1      
  26   1              // TPDU段协议标识、编码方式、用户信息等
  27   1              nLength = strlen(pSrc->TP_UD);  // 用户信息字符串的长度
  28   1              buf[0] = pSrc->TP_PID;                  // 协议标识(TP-PID)
  29   1              buf[1] = pSrc->TP_DCS;                  // 用户信息编码方式(TP-DCS)
  30   1              buf[2] = 0;                                             // 有效期(TP-VP)为5分钟
  31   1                      
  32   1                      // 7-bit编码方式
  33   1                      buf[3] = nLength;                       // 编码前长度
  34   1                      nLength = gprsEncode7bit(pSrc->TP_UD, &buf[4], nLength+1) + 4;  // 转换TP-DA到目标PDU串
  35   1              
  36   1              
  37   1              nDstLength += gprsBytes2String(buf, &pDst[nDstLength], nLength);                // 转换该段数据到目标PDU串
  38   1      
  39   1              // 返回目标字符串长度
  40   1              return nDstLength;
  41   1      }
*** ERROR C241 IN LINE 41 OF PDU.C: '_gprsEncodePdu': auto segment too large
  42          
  43          // PDU解码,用于接收、阅读短消息
  44          // pSrc: 源PDU串指针
  45          // pDst: 目标PDU参数指针
  46          // 返回: 用户信息串长度
  47          int gprsDecodePdu(const char* pSrc, SM_PARAM* pDst)
  48          {
  49   1              int nDstLength;                 // 目标PDU串长度
  50   1              unsigned char tmp;              // 内部用的临时字节变量
  51   1              unsigned char buf[256]; // 内部用的缓冲区
  52   1      
  53   1              // SMSC地址信息段
  54   1              gprsString2Bytes(pSrc, &tmp, 2);        // 取长度
CX51 COMPILER V7.20   PDU                                                                  09/10/2006 15:19:49 PAGE 2   

  55   1              tmp = (tmp - 1) * 2;    // SMSC号码串长度
  56   1              pSrc += 4;                      // 指针后移,忽略了SMSC地址格式
  57   1              gprsSerializeNumbers(pSrc, pDst->SCA, tmp);     // 转换SMSC号码到目标PDU串
  58   1              pSrc += tmp;            // 指针后移
  59   1      
  60   1              // TPDU段基本参数、回复地址等
  61   1              gprsString2Bytes(pSrc, &tmp, 2);        // 取基本参数
  62   1              pSrc += 2;              // 指针后移
  63   1      //      if(tmp & 0x80)
  64   1              {
  65   2                      // 包含回复地址,取回复地址信息
  66   2                      gprsString2Bytes(pSrc, &tmp, 2);        // 取长度
  67   2                      if(tmp & 1) tmp += 1;   // 调整奇偶性
  68   2                      pSrc += 4;                      // 指针后移,忽略了回复地址(TP-RA)格式
  69   2                      gprsSerializeNumbers(pSrc, pDst->TPA, tmp);     // 取TP-RA号码
  70   2                      pSrc += tmp;            // 指针后移
  71   2              }
  72   1      
  73   1              // TPDU段协议标识、编码方式、用户信息等
  74   1              gprsString2Bytes(pSrc, (unsigned char*)&pDst->TP_PID, 2);       // 取协议标识(TP-PID)
  75   1              pSrc += 2;              // 指针后移
  76   1              gprsString2Bytes(pSrc, (unsigned char*)&pDst->TP_DCS, 2);       // 取编码方式(TP-DCS)
  77   1              pSrc += 2;              // 指针后移
  78   1              gprsSerializeNumbers(pSrc, pDst->TP_SCTS, 14);          // 服务时间戳字符串(TP_SCTS) 
  79   1              pSrc += 14;             // 指针后移
  80   1              gprsString2Bytes(pSrc, &tmp, 2);        // 用户信息长度(TP-UDL)
  81   1              pSrc += 2;              // 指针后移
  82   1              
  83   1                      // 7-bit解码
  84   1                      nDstLength = gprsString2Bytes(pSrc, buf, tmp & 7 ? (int)tmp * 7 / 4 + 2 : (int)tmp * 7 / 4);    // 格式转换
  85   1                      gprsDecode7bit(buf, pDst->TP_UD, nDstLength);   // 转换到TP-DU
  86   1                      nDstLength = tmp;
  87   1              
  88   1      
  89   1              // 返回目标字符串长度
  90   1              return nDstLength;
  91   1      }
*** ERROR C241 IN LINE 91 OF PDU.C: '_gprsDecodePdu': auto segment too large
  92          

CX51 COMPILATION COMPLETE.  0 WARNING(S),  2 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -