OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6740|回复: 19

请教各位:单片机模块之间的通信用怎样的方式来代替全局变量传值法?

[复制链接]

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
发表于 2013-5-12 13:04:48 | 显示全部楼层 |阅读模式
小弟发现单片机代码模块之间的通信总会要使用好多全局变量来完成,据说全局变量是越少越好,网上传说的用封装的方法,是怎么回事呢?还有我貌似觉得 好多时候不用全局变量几乎是搞不定的啊!看见有人说 如果你代码里没有全局变量  那你就是高手了。我想知道高手是怎么练成的!
        但小弟现在只想知道个简单实用的方法,望高人不吝赐教!举个例子:
用按键控制屏幕时,我是这样做的:根据按键键值来将标志位置位,屏幕再根据标志位的值来进行相应动作!我的标志位很多,而且都是全局变量!大家有啥方法可以不用全局变量??
        补充下:使用全局变量和使用全局数组有区别吗?我用一个全局数组代替了好多全局变量,这样是否要好些??
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-12 13:14:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 13:16:32 | 显示全部楼层
不是 我要根据按键键值来置位标志位,然后再根据标志位的值来决定屏幕做什么 我用的stm32资源是没有问题的呢
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 13:16:55 | 显示全部楼层
回复【2楼】nonplus:
---------------------------------
 不是 我要根据按键键值来置位标志位,然后再根据标志位的值来决定屏幕做什么 我用的stm32资源是没有问题的呢
我得用按键来控制屏幕,过程比较复杂,用一个全局变量肯定搞不定呃,有什么好方法吗?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-12 13:21:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 13:24:36 | 显示全部楼层
回复【5楼】nonplus:
---------------------------------
是这样的:我的4X4矩阵键盘,我用了14个键;0~9这10个数字键是用来给屏幕输入数据(两位数)的,还有四个键是用来控制的,比如决定给屏幕的什么位置输入一个2位数。
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2013-5-12 13:47:08 | 显示全部楼层
回复【6楼】可乐虎:
---------------------------------
不需要全局变量,按键return.我25个按键的基本上没有用全局变量。位置你用一个全局变量确定就行了。
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-12 13:56:10 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 14:12:04 | 显示全部楼层
回复【7楼】miaoguoqiang:
---------------------------------
那你的按键控制的是什么呢?复杂吗?
回复【8楼】nonplus:
---------------------------------
我的某些按键的动作是要基于其它按键是否按下的。比如我要调节数据,那么必须得先按下开始键后,再根据方向键来判断是调节哪里的数据,最后再按0~9数字键才能调节数据的!你写的结构貌似过于简单呀
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-12 15:34:15 | 显示全部楼层
设计一个好的程序结构.

以8L为例,参考PC的按键处理.

1.构建一个Key_Scan,处理按键事件,返回"键A按下","键A释放"之类的事件.

2.构建一个Key_Explain,处理操作,内部调度1,并生成操作队列,比如"键A按下"-"键B按下",对队列进行解释并返回操作码.操作队列甚至可以包括时间信息,比如"键A按下"-"持续n毫秒",用于解释长按键,拖动等操作.

3.构建一个进程,里面执行2,并根据返回值生成消息.对于非操作系统,简单可以使用switch进行工作指派.


用不用全局变量,见仁见智,比如消息就是经过封装的全局变量.只要有严谨的管理和结构,程序可读性可以比刻意做到零全局要好.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 15:42:57 | 显示全部楼层
回复【10楼】shihantu:
---------------------------------
        你的方法实现了一定很牛叉啊  可惜 我没搞过PC编程啊,要实现你的思路 不晓得要搞多久呢?你有没有个比较简单 在单片机上比较实用的方法呢?另外请问下 全局变量和 全局数组有区别吗?我用全局数组代替了多个全局变量~
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-12 15:47:20 | 显示全部楼层
回复【11楼】可乐虎:
---------------------------------
这个可是最简单的思路了,不需要有PC编程基础,我描述的知识PC的按键处理的功能划分而已,在单片机上照样可以实现.

代码上,就写3个函数,各有分工,调试什么的互不干扰.

全局变量就是全局变量,全局数组就是以数组形式组织的全局变量.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 16:12:00 | 显示全部楼层
回复【12楼】shihantu:
---------------------------------
你有没有相关代码 给我参考下啊 ,你的思路我看起来似懂非懂的,我太菜啦~
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-12 16:20:23 | 显示全部楼层
没有.
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 16:27:18 | 显示全部楼层
回复【14楼】shihantu:
---------------------------------
我现在遇到个问题 很棘手啊,我的4X4矩阵键盘 中有10个键是要用作数字键的,而这些数字键 又得基于某些控制键按下后 才能起作用,我还是只能用控制键将标志位置位,然后那些数字键根据标志位 来动作。你有好的思路吗?
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-12 16:27:26 | 显示全部楼层
回复【13楼】可乐虎:
---------------------------------
1.怎么可能有代码,谁知道谁的线路怎么接,按键怎么用.

2.难道我的描述很难懂吗???

第一段代码就是最普通的按键读取,什么矩阵扫描什么按键直接连接引脚什么芯片扩展,只要是开发板都有的代码.
第二段代码就是把第一段代码的返回值放到一个数组,然后if是这个操作,或者是这个操作组合就返回1,那个操作组合就返回2,还有别的就返回34567.
第三段就是按照第二段的返回值,if返回1就干嘛,返回2就干嘛,返回3就爱干嘛干嘛.
如果不懂就把开发板代码抄1k遍.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

86

主题

417

帖子

0

精华

高级会员

Rank: 4

积分
781
金钱
781
注册时间
2013-2-20
在线时间
0 小时
 楼主| 发表于 2013-5-12 16:40:08 | 显示全部楼层
回复【16楼】shihantu:
---------------------------------
关于第一段代码就是按键扫描代码 ,我有。它就是用来返回键值的。
关于第二段代码 我的就是队列,有键值按下就入队,等执行完相应动作后 最后再出队。
关于第三段代码 我是用作读取队首的值,然后做出相应动作。

我第二段代码 实质就是把按键的键值全部存起来,防止漏键。
关于你的第二段代码里的if语句  我不明白~
乐于思考,敢于请教;问人不累,诲人不倦!本人CSDN博客:http://blog.csdn.net/dcx1205 学习嵌入式的同学不要错过啊!
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-5-12 17:38:28 | 显示全部楼层
你把队列分析放到第三段,我的第二段是包含了入队,分析队列,和出队.因为分析结果会影响到出队策略.

if就是分析队列.

我的第三段是属于任务管理,和按键其实没有多少关系,只是写了这个会和系统其他操作管理到同一个等级,方便移植.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

105

主题

522

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1386
金钱
1386
注册时间
2012-10-23
在线时间
97 小时
发表于 2013-5-12 18:25:16 | 显示全部楼层
回复【9楼】可乐虎:
---------------------------------
不是很复杂,就是跟手机操作类似的。需要手动设置一些参数后运行。实现方法很多,多思考一下就好了
回复 支持 反对

使用道具 举报

头像被屏蔽

88

主题

231

帖子

2

精华

高级会员

Rank: 4

积分
844
金钱
844
注册时间
2013-4-11
在线时间
40 小时
发表于 2013-5-12 22:09:27 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 06:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表