Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007378
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2012-08-09 14:33:46

#include "pointer_in.h"

#ifdef pointer

int pointer_test(void)
{
 gef_if_serial_init();
 while(1)
 {
  gef_if_s0_send(master_serial0);
 }
 return 0;
 
}
int  x;
int gef_if_serial_init(void)
{
 int len=60;
 x=sizeof(gef_if_test);
 #ifdef MALLOC
 master_serial0=(serial_head_t *)malloc(len);
 if(master_serial0==NULL)
 {
  return -1;
 }
 memset(master_serial0,0,len);
 #else
 master_serial0=(serial_head_t *)calloc(1,len);
 if(master_serial0==NULL)
 {
  return -1;
 }
 #endif
 
 memset(master_serial0,0x33,6);
 memset((unsigned char *)master_serial0+6,0x99,6);
 master_serial0->mac.type=0x8907;
 len=len+1;
 len=len-1;
 return 0;
}
int gef_if_s0_send(serial_head_t *p)
{
 gef_if_serial_frame_t gef_frame_p;
 p->id=0x11;
 p->subid=2;
 
 gef_frame_p.id=0x11;
 gef_frame_p.len=60;
 gef_frame_p.flag=1;
 gef_frame_p.payload=(serial_head_t *)p;
 gef_if_serial_send(&gef_frame_p);
 return 0; 
}
int gef_if_serial_send(gef_if_serial_frame_t *p)
{
 uart_send(p->payload,p->len,p->flag);
 return 0;
}
int uart_send(unsigned char *data,int len,int flag)
{
 switch(flag)
 {
  case 1:uart_send_1(data,len);break;
  case 2:uart_send_2(data,len);break;
  case 3:uart_send_3(data,len);break;
  default:
  SerPort_SendBuf(COM1,"flag err!\r\n",10);
 }
 return 0;
}
int uart_send_1(unsigned char *data,int len)
{
 while(len--)
 {
 u_send(data++);
 delay(10000);
 }
 return 0;
}
int uart_send_2(unsigned char *data,int len)
{
 while(len--)
 {
 u_send(data++);
 delay(20000);
 }
 return 0;
}
int uart_send_3(unsigned char *data,int len)
{
 while(len--)
 {
 u_send(data++);
 delay(30000);
 }
 return 0;
}
int u_send(unsigned char *data)
{
#ifdef RS_485
 rs485_tx();
 Led_Ctl(LED_485, 1);
 UART1_SendByte(*data);
 rs485_rx();
#else
 UART0_SendByte(*data);
#endif
 return 0;
}
 
#endif
1、定义一个结构体,该结构体有很多的描述符,在各层函数中,通过判断这些描述符来设定具体的一些参数。
2、该结构体中有个空指针,指向一个数据区的其实地址(被指定的数据区是一个已经开辟好的动态内存区)
3、malloc以及calloc申请动态内存后,一定要判断是否申请成功,否则return -1.
4、定义一个指针,不管是什么类型的指针,例如char *p,这个指针占用的内存空间都是4个字节。
例如计算gef_if_test的大小应该是16.
5、注意calloc的使用,calloc(1,len),开辟一块大小为len的内存区。应该包含头文件“stdlib.h”
 
在头文件中一些类型的定义和函数的声明:
#ifndef _POINTER_OUT_H
#define _POINTER_OUT_H

typedef struct
{
unsigned int msgid;
unsigned int type;
int len;
void *payload;
}gef_if_fast_data_t;
typedef struct
{
unsigned char dst[6];
unsigned char src[6];
unsigned short type;
}mac_head_t;
typedef struct
{
mac_head_t mac;
unsigned char id;
unsigned char subid;
}serial_head_t;

typedef struct
{
int id;
int len;
int flag;
void *payload;
}gef_if_serial_frame_t;
typedef struct
{
int a;
char *b;
int c;
void *payload;
}gef_if_test;

extern int pointer_test(void);

extern int gef_if_serial_init(void);
extern int gef_if_s0_send(serial_head_t *p);
extern int gef_if_serial_send(gef_if_serial_frame_t *p);
extern int uart_send(unsigned char *data,int len,int flag);
extern int uart_send_1(unsigned char *data,int len);
extern int uart_send_2(unsigned char *data,int len);

extern int uart_send_3(unsigned char *data,int len);
extern int u_send(unsigned char *data);
 
#endif
阅读(1504) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~