打印

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

[复制链接]
1077|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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函数通过传递参数的方式    比如函数有两个参 ...

上面的程序是大大简化版,原函数中子函数有好多,且每次操作的管脚数也有好几个,这样的话,每个子函数都要添加好几个参数,略显麻烦。

使用特权

评论回复
5
dspic30|  楼主 | 2014-8-19 17:03 | 只看该作者
zhangmangui 发表于 2014-8-19 16:56
你可以巧妙地用##连接符处理

这是什么高科技?求详解。

使用特权

评论回复
6
dspic30|  楼主 | 2014-8-19 20:24 | 只看该作者
zhangmangui 发表于 2014-8-19 16:56
你可以巧妙地用##连接符处理

刚看了下##,没觉得他们之间有什么联系,您能大略说下您的看法么?

使用特权

评论回复
7
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 很给力!
8
zhangmangui| | 2014-8-19 21:48 | 只看该作者
dspic30 发表于 2014-8-19 20:24
刚看了下##,没觉得他们之间有什么联系,您能大略说下您的看法么?

比如这句GpioDataRegs.GPASET.bit.GPIO24
你可以通过函数参数   将参数通过##拼接到上面一句中

使用特权

评论回复
9
dspic30|  楼主 | 2014-8-20 14:29 | 只看该作者
大神辈出的论坛,等我消化消化。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

60

帖子

0

粉丝