指针的一种用法(优化代码)

发布者:花开堂前最新更新时间:2015-07-09 来源: 51hei关键字:指针  优化代码 手机看文章 扫描二维码
随时随地手机看文章
/************************************************************************
 函数名 :unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir)
 功能  :can发送
 参数  :*can_tmp 数据包 pir: 优先级 0~3
 返回  :1->缓冲池满需要等待下次装入发送缓冲池 0->成功放入缓冲池
************************************************************************/
unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir)
{
 unsigned char n,flag;
 unsigned char temp;
 unsigned char *P_addr,*P_addr_temp;
 flag = 0;
 if((TXB0CON&0x08)==0)
  {
   P_addr = (unsigned char*)(&TXB0CON);
   flag = 1;
  }
 if((TXB1CON&0x08)==0)
  {
   P_addr = (unsigned char*)(&TXB1CON);
   flag = 1;
  }
 if((TXB2CON&0x08)==0)
  {
   P_addr = (unsigned char*)(&TXB2CON);
   flag = 1;
  }
if(flag==1)
  {
       P_addr_temp = P_addr;
      *P_addr = pir;
       P_addr++;
      if(can_tmp->IDR_RTR&0x02)//扩展标识符
      {
       *P_addr = ((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));
       temp = can_tmp->ID[2]&0x03;
       temp|=((can_tmp->ID[2]&0x1C)<<3);
       temp|= 0x08;
       P_addr++;
       *P_addr = temp;
       P_addr++;
       *P_addr = can_tmp->ID[1];
       P_addr++;
       *P_addr = can_tmp->ID[0];
       P_addr++;
      }
     else
    {
        *P_addr = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));;
         P_addr++;
        *P_addr = (can_tmp->ID[0]<<5);
         P_addr+=3;
   }
        *P_addr = can_tmp->length;
        P_addr++;
       for(n=0;nlength;n++)
        {
        *P_addr =can_tmp->DATA[n];
        P_addr++;
       }
       *P_addr_temp |= 0x08;
      return 0;
  }
  return 1;
}
/************************************************************************
 函数名 :unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir)
 功能  :can发送
 参数  :*can_tmp 数据包 pir: 优先级 0~3
 返回  :1->缓冲池满需要等待下次装入发送缓冲池 0->成功放入缓冲池
************************************************************************/
unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir)
{
 unsigned char n;
 unsigned char temp;
 unsigned char *P_addr;
if((TXB0CON&0x08)==0)
   {
   // TXB0CON&=0xfc;
   //bit3=0标准标识符,bit3=1扩展标识符,bit7-5:标准标识符2-0位,bit7-5 扩展ID[16-17]
    TXB0CON = pir;//|= pir;           //设置TXB0为最高优先级3
   if(can_tmp->IDR_RTR&0x02)//扩展标识符
   {
 TXB0EIDL  = can_tmp->ID[0];//扩展ID[0-7]
 TXB0EIDH  = can_tmp->ID[1];//扩展ID[8-15]
 TXB0SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]
    temp= ((can_tmp->ID[2]&0x1C)<<3);
    TXB0SIDL |= temp;//标准[0-3]
    TXB0SIDL |= 0x08;
 TXB0SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位
   }
   else
   {
    TXB0SIDL = (can_tmp->ID[0]<<5);//标准[0-3]
    TXB0SIDH = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));
   }
//if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40;
 TXB0DLC=can_tmp->length;
    P_addr = &TXB0D0;
    for(n=0;nlength;n++)
    {
     *P_addr =can_tmp->DATA[n];
      P_addr++;
    }
    TXB0CON=TXB0CON|0x08; /* bit3(TXREQ)=1请求发送 */
    return 0;
  }
  if((TXB1CON&0x08)==0)
   {
   // TXB1CON&=0xfc;
    TXB1CON = pir;//|= pir;
   if(can_tmp->IDR_RTR&0x02)//扩展标识符
   {
 TXB1EIDL  = can_tmp->ID[0];//扩展ID[0-7]
 TXB1EIDH  = can_tmp->ID[1];//扩展ID[8-15]
 TXB1SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]
    temp= ((can_tmp->ID[2]&0x1C)<<3);
    TXB1SIDL |= temp;//标准[0-3]
    TXB1SIDL |= 0x08;
 TXB1SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位
   }
   else
   {
    TXB1SIDL = (can_tmp->ID[0]<<5);//标准[0-3]
    TXB1SIDH = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));
   }
  //if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40;
 TXB1DLC=can_tmp->length;
 
    P_addr = &TXB1D0;
    for(n=0;nlength;n++)
    {
     *P_addr =can_tmp->DATA[n];
      P_addr++;
    }
    TXB1CON=TXB1CON|0x08; 
return 0;
  }
if((TXB2CON&0x08)==0)
  {
    //TXB2CON&=0xfc;
    TXB2CON = pir;
   if(can_tmp->IDR_RTR&0x02)//扩展标识符
   {
 TXB2EIDL  = can_tmp->ID[0];//扩展ID[0-7]
 TXB2EIDH  = can_tmp->ID[1];//扩展ID[8-15]
 TXB2SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]
    temp= ((can_tmp->ID[2]&0x1C)<<3);
    TXB2SIDL |= temp;//标准[0-3]
    TXB2SIDL |= 0x08;
 TXB2SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位
   }
   else
   {
    TXB2SIDL = (can_tmp->ID[0]<<5);//标准[0-3]
    TXB2SIDH = (can_tmp->ID[1]<<5|(can_tmp->ID[0]>>3));
   }
// if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40;
 TXB2DLC=can_tmp->length;
  
    P_addr = &TXB2D0;
    for(n=0;nlength;n++)
    {
     *P_addr =can_tmp->DATA[n];
      P_addr++;
    }
    TXB2CON=TXB2CON|0x08; 
return 0;
  }
return 1;
}
关键字:指针  优化代码 引用地址:指针的一种用法(优化代码)

上一篇:致电子系师弟师妹们—入门篇
下一篇:sd卡读写 spi模式

推荐阅读最新更新时间:2024-03-16 14:24

MF47指针式万用表运用办法
下面联络MF47型万用表,介绍一下指针式万用表的构造。 MF47型万用表是一种高活络度、多量程的便携式整流系外表,能结束交直流电压、直流电流、电阻等底子项意图丈量,还能估测电容器的功用等。MF47型万用表外形如图1所示,不和有电池盒。 ①表头:表头是万用表的首要构成有些,决议了万用表的活络度。表头由表针、磁路体系和偏转体系构成。为了行进丈量的活络度和便于拓展电流的量程,表头通常都选用内阻较大、活络度较高的磁电式直流电流表。别的,表头上还设有机械调零旋钮,用以校对表针在左端的零位。 万用表的表头是一个活络电流表,电流只能从正极流入,从负极流出。在丈量直流电流的时分,电流只能从与“+”插孔相连的红表笔流入,从与“-”插孔相连的黑
[测试测量]
MF47<font color='red'>指针</font>式万用表运用办法
万用表指针式和数字式的选用
指针表和数字表的选用:   1、指针表读取精度较差,但指针摆动的过程比较直观,其摆动速度幅度有时也能比较客观地反映了被测量的大小(比如测电视机数据总线(SDL)在传送数据时的轻微抖动);数字表读数直观,但数字变化的过程看起来很杂乱,不太容易观看。   2、指针表内一般有两块电池,一块低电压的1.5V,一块是高电压的9V或15V,其黑表笔相对红表笔来说是正端。数字表则常用一块6V或9V的电池。在电阻档,指针表的表笔输出电流相对数字表来说要大很多,用R×1Ω档可以使扬声器发出响亮的“哒”声,用R×10kΩ档甚至可以点亮发光二极管(LED)。   3、在电压档,指针表内阻相对数字表来说比较小,测量精度相比较差。某些高电压微电流的
[测试测量]
一种验证指针程序的方法
随着国家、社会和日常生活对软件系统的依赖程度日益增长,安全攸关软件的高可信成为保障国家安全、保持经济可持续发展和维护社会稳定的必要条件。  形式验证是提高软件可信程度的重要方法。粗略地说,软件的形式验证有两种途径,第一种是模型检测,它通过遍历系统所有状态空间,能够对有穷状态系统进行自动验证,并自动构造不满足验证性质的反例。这种方法在工业界较流行。第二种是逻辑推理,它利用某种程序逻辑进行演算,对程序性质进行严格的推理,产生验证条件,再利用定理证明器进行证明。本文所讨论的方法是基于逻辑推理的方式。  对于指针程序的推理,关键在于别名的判断和处理。通常所采用的Hoare逻辑的一个重要限制是程序中不同的名字代表不同的程序对象,即不允许出
[工业控制]
一种验证<font color='red'>指针</font>程序的方法
单片机C51 - 16 x 16点阵使用指针显示汉字
近年来,点阵LED显示屏利用发光二极管构成的点阵模块或像素单元组成可变面积的显示屏幕,以可靠性高、使用寿命长、环境适应能力强、性能价格比高、使用成本低等特点,已成为众多显示媒体以及户外作业显示的电子工具,广泛地应用于车站、宾馆、金融、证券、邮电、体育等广告发布或交通运输等行业。本文中所介绍的16x16LED显示屏是采用4块最基本的8X8 LED点阵显示模块,理解8X8 LED点阵的工作原理就可以基本掌握LED点阵显示技术。 LED点阵显示的基本原理 8X8点阵LED结构如下图所示 从图中可以看出,8X8点阵是由一排排的LED灯组成的,它们的阴端连接到行,阳端连接到列,当想要点阵显示什么数字或者字母或者图形的时候,只需
[单片机]
单片机C51 - 16 x 16点阵使用<font color='red'>指针</font>显示汉字
指针式万用表工作原理和使用方法
对于电子爱好者来说,万用表是再熟悉不过的通用检测工具了,是必不可少也是最基础的检测测量工具。以前万用表也称之为“三用表”,这是因为当初的万用表只有测量电阻、电压、电流这三项功能。现在几乎听不到这样叫的了,因为现在的万用表功能越来越多,如测量电感量、电容量、频率、晶体管参数等,所以称其为“万用表”。 万用表分为指针式万用表和数字式万用表,本文向初学者介绍一下指针式万用表的工作原理和基本的使用方法,以测量电阻、电压和电流为例。 万用表的工作原理 万用表的基本工作原理是利用一只灵敏的磁电式直流电流表(微安表)做表头。当微小电流通过表头,就会有电流指示。但表头不能通过大电流,所以,必须在表头上并联与串联一些电阻进行分流或降压,从而
[测试测量]
ATmega16 堆栈指针
堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子程序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60 的地址空间。使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使用POP 指令将数据弹出堆栈时,堆栈指针加一;而用RET 或RETI 指令从子程序或中断返回时堆栈指针加二。 AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请注意某些AVR 器件的数据区太小,用SPL 就足够了。此时将不给出SPH 寄存器。
[单片机]
ATmega16 堆栈<font color='red'>指针</font>
指针,其实很危险
我们知道,指针是指向一个地址的。而指针的类型则表明了指针指向内容的大小,即包含字节数,这在对于指针的自增和自减中体现的很明确。 比如下面一段代码,我们分别定义了3个不同类型的指针,指向相同的地址,然后赋予不同的值。这样一下我们就明了了。 //解释代码 char *p_char; short *p_short; long *p_long; p_char = (char*)0x1000; p_short = (short*)0x1000; p_long = (long*)0x1000; *p_char = 0x12; *p_short = 0x1234; *p_long = 0x
[单片机]
指针万用表检修故障两例
在家电维修过程中,因电容漏电或容量变化而引发的故障可谓屡见不鲜且故障现象各异。一般的指针万用表和部分数字万用表都无法测量电容,特别是那些小电容,给维修造成很大的不便。在此,我给大家介绍几种小容量电容的测量方法,供参考。 方法l:找一个β≥250的晶体三极管(要求穿透电流要小),如一时找不到,可用两只同型号的三极管复合成达林顿形式,见图1。将被测电容并接在三极管的c-e结(若为有极性电容则电容正极接三极管c极),然后用万用表R×10k挡,黑表笔接c极,红笔接e极,见图2,观察表针瞬时摆动程度。照此法用几个已知容量的正常(高精确度)的电容反复测试,记录下表针每次的瞬时最大摆动幅值,l进行处理计算,算出表盘上每小格应代表的电容值,备日后
[测试测量]
<font color='red'>指针</font>万用表检修故障两例
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved