打印
[STM32F1]

输出一个16进制数到16个引脚上,怎么写执行速度最快

[复制链接]
1729|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
magic_yuan|  楼主 | 2014-4-24 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,
  如题所示。
  将一个16进制的数输出到STM32的16个引脚上(不在同一个系列IO上面,比如有PA,也有PB,PE),怎么写代码最快呢?
  目前我的思路是:引脚使用位带操作。对16进制数实行位与(比如和0X01位与),得到一个新的16进制数。但这个新的16进制数不能直接赋值给引脚,因为数据不匹配,还要判断下。示例代码如下:
   u16 a=0x01;  u16 m=0x98;
  u16 r=0x00;

   r=m&a;//得到m的最后一位数字是0还是1,r的结果为0X00或者0X01.
    if(r==0) PEOUT3=0; else PEOUT3=1;

由于是对16个引脚赋值,所有以上类似的代码书写16次。
  问题:以上代码和思路效率怎么样,更快的执行代码怎么写呢?多谢啊!
沙发
mmuuss586| | 2014-4-24 11:05 | 只看该作者
不好意思,和你想法差不多,没有太好的思路。

使用特权

评论回复
板凳
airwill| | 2014-4-24 22:48 | 只看该作者
效率当然不高。
最快当然是放在一个端口上。
或者几个同样端口的位一起写。

使用特权

评论回复
地板
290399937| | 2014-4-24 23:05 | 只看该作者
话说!可以不要if吗?PEOUT3=r

使用特权

评论回复
评论
magic_yuan 2014-4-25 09:39 回复TA
这样执行结果不对,数据类型不一致。 
5
magic_yuan|  楼主 | 2014-4-25 09:39 | 只看该作者
airwill 发表于 2014-4-24 22:48
效率当然不高。
最快当然是放在一个端口上。
或者几个同样端口的位一起写。 ...

比如都放PF口上,即PF0~PF7,这样不是16个口,而是8个口,速度好像和任意的8个口一样的。。。。。
多谢啊!

使用特权

评论回复
6
magic_yuan|  楼主 | 2014-4-26 16:56 | 只看该作者
顶下,看还有高手指点么

使用特权

评论回复
7
Leeone| | 2014-4-27 09:43 | 只看该作者
位域加联合体就不要与或了,应该快些

使用特权

评论回复
8
foxpro2005| | 2014-4-27 10:19 | 只看该作者
PEOUT3 = m&a;

PEOUT3 = (m<<15);

使用特权

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

本版积分规则

个人签名:发到3000帖时,生活大概完成了一种转折。

359

主题

2770

帖子

7

粉丝