//---- 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;
}
Powered by ddoss.cn 12.0
©2015 - 2025 ddoss
渝公网安备50011302222260号
渝ICP备2024035333号
【实验平台安全承诺书】
小绿叶技术社区,优化网络中,点击查看配置信息
主机监控系统: 安全防火墙已开启检查cc攻击-下载文件完成后等待10s 恢复访问,检查连接数低于峰值恢复访问
您的IP:216.73.216.110,2025-12-01 14:34:56,Processed in 0.01269 second(s).