//---- gpio.h ----//
#include <stdint.h> // uint 函数 头文件
static uint8_t ddrsum[6] = {
7,
3,
7,
3,
7,
7
};
// const 只读,不允许改变的关键字数组类型
/*
static uint64_t gpioNM[] =
{
'DDRT',
'DDRM',
'DDRS',
'DDRJ',
'DDRP',
'DDR0AD'
};
*/
static uint64_t gpioNM[] =
{
'T',
'M',
'S',
'J',
'P',
'D'
};
// 参数结构体
typedef struct
{
uint64_t gpioname;
uint8_t gpiosum;
uint8_t _incAD;
uint8_t i;
}GPIOtruct;
extern GPIOtruct gpio;
//---- gpio.c ----//
#include <stdio.h> // 标准头文件
#include <stdint.h> // uint_8 头文件
#include <string.h>
#include "gpio.h"
GPIOtruct gpio;
uint64_t PgpioNM[6];
uint8_t Pddrsum[6];
uint8_t counti= sizeof(ddrsum)/sizeof(ddrsum[0]);
// 数组总字节大小 除以 第一个字节大小 等于 多少个数组元素
void GetValue(void) // 从 .h 里面获取数组
{
uint64_t *pRom, *pRam;
uint8_t Cnt = 0;
pRom = (uint64_t*)&gpioNM;
pRam = (uint64_t*)&PgpioNM;
Cnt = counti;
while(Cnt--)
{
*pRam++ = *pRom++;
}
pRom = (uint8_t*)&ddrsum;
pRam = (uint8_t*)&Pddrsum;
Cnt = counti;
while(Cnt--)
{
*pRam++ = *pRom++;
}
}
void jisuan(GPIOtruct *_gpio)
{
_gpio->gpiosum = Pddrsum[_gpio->i]; // 获取个数
_gpio->gpioname = PgpioNM[_gpio->i ]; // 获取名字
uint8_t i = _gpio->gpiosum;
// char *p;
// p=_gpio->gpioname; // 强制转换变量类型
//strcpy(p, _gpio->gpioname);
char *p;
p=_gpio->gpioname;
for (;;)
{
if( 0 > i || 255 == i )
{
break;
}
printf( "DDR%s_DDR%s%d=0; \n" ,&p, &p, i ); // 打印: 是指针的内存地址,对应的值
i--;
}
}
int main(int argc, char const *argv[])
{
uint8_t i=0;
GetValue();
for(;;)
{
usleep(200000); // 200ms
gpio.i=i;
if(counti-1<i) // count=6 时 循环7次; 6-1=5 循环6次
{
printf("exit! i = %d counti = %d \n \n ",i, counti);
break;
}
else
{
printf("\n");
}
jisuan(&gpio);
i++;
}
return 0;
}