如何将管脚传递给子函数中的变量,通过对变量的操作将管脚置一或置零?

[复制链接]
 楼主| dspic30 发表于 2014-8-19 14:54 | 显示全部楼层 |阅读模式
#define BDATA1 GpioDataRegs.GPASET.bit.GPIO24
#define BDATA0 GpioDataRegs.GPACLEAR.bit.GPIO24
#define CDATA1 GpioDataRegs.GPASET.bit.GPIO22
#define CDATA0 GpioDataRegs.GPACLEAR.bit.GPIO22
void main()
{ Uint16 date1,date0;
date1=BDATA1;date0=BDATA0;handle();
date1=BDATA1;date0=BDATA0;handle();}
void handle()
{date1=1;date0=1;}
程序是一些片段,主题思想是第一次子函数是在GPIO24上操作,第二次是在GPIO22上操作,这样写可以么?能将管脚直接赋给变量么?如果不能,怎样改才能实现子函数每次都在不同的管脚上操作呢?请大神赐教。
zhangmangui 发表于 2014-8-19 16:54 | 显示全部楼层
不能将SET或CLEAR等寄存器直接赋给一个变量吧
你可以给handle函数通过传递参数的方式    比如函数有两个参数  
一个用来指明是哪个IO口    另一个指明是送高电平还是低电平   
zhangmangui 发表于 2014-8-19 16:56 | 显示全部楼层
你可以巧妙地用##连接符处理   
 楼主| dspic30 发表于 2014-8-19 17:00 | 显示全部楼层
zhangmangui 发表于 2014-8-19 16:54
不能将SET或CLEAR等寄存器直接赋给一个变量吧
你可以给handle函数通过传递参数的方式    比如函数有两个参 ...

上面的程序是大大简化版,原函数中子函数有好多,且每次操作的管脚数也有好几个,这样的话,每个子函数都要添加好几个参数,略显麻烦。
 楼主| dspic30 发表于 2014-8-19 17:03 | 显示全部楼层
zhangmangui 发表于 2014-8-19 16:56
你可以巧妙地用##连接符处理

这是什么高科技?求详解。
 楼主| dspic30 发表于 2014-8-19 20:24 | 显示全部楼层
zhangmangui 发表于 2014-8-19 16:56
你可以巧妙地用##连接符处理

刚看了下##,没觉得他们之间有什么联系,您能大略说下您的看法么?
dictionary 发表于 2014-8-19 20:44 | 显示全部楼层
本帖最后由 dictionary 于 2014-8-19 20:58 编辑

可以的 用 struct 位处理 可以将管脚变为结构体中的1位
struct gpio_t
{
    uint16_t pin_1 :1;
    uint16_t pin_2 :1;
    ^^^^^^^^^^^^^
    uint16_t pin_16 :1;
};

这样子#define gpio_x  (struct gpio_t *)(gpio x register addr)
gpio_x->pin_1 = 0; 或者 gpio_x->pin_2 = 1;
这么操作

你也可以直接强制转换结构体指针为uint16_t *p = (uint16_t *)gpio_x;
之后就可以 *p = 0xFF;
这么玩了。

不过这样子 做没什么意义啊

评分

参与人数 1威望 +6 收起 理由
zhangmangui + 6 很给力!

查看全部评分

zhangmangui 发表于 2014-8-19 21:48 | 显示全部楼层
dspic30 发表于 2014-8-19 20:24
刚看了下##,没觉得他们之间有什么联系,您能大略说下您的看法么?

比如这句GpioDataRegs.GPASET.bit.GPIO24
你可以通过函数参数   将参数通过##拼接到上面一句中
 楼主| dspic30 发表于 2014-8-20 14:29 | 显示全部楼层
大神辈出的论坛,等我消化消化。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

60

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部