打印
[51单片机]

小实验说明正确选用数据类型的重要意义

[复制链接]
4090|55
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
下面以这个简单程序为例,测试k变量在不同数据类型下的IO切换速率,晶振统一采用12M

#include <stc12c.h>
void main(void)
{
u8 k;
while(1)
{
  P3=0x0;
  k=255;
  while(k--);
  P3=0xff;
  k=255;
  while(k--);
}
}

当k为u8类型时(unsigned char):
file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/1716094642/QQ/WinTemp/RichOle/%7BPJBJW689VRKZU1)FCT%60%60(N.png

IO翻转周期为0.4907ms;

当k为unsigned short(16位)类型时:
[img]file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/1716094642/QQ/WinTemp/RichOle/TB)BKAY7[DJ5MX%25H4CGA(2N.png[/img]

IO翻转周期为0.7043ms;

当k为unsigned int(32位)类型时:[img]file:///C:/Users/Administrator/AppData/Roaming/Tencent/Users/1716094642/QQ/WinTemp/RichOle/Z5RS$9LV[QKGZFSJFS]W4%7DJ.png[/img]

IO翻转周期为2.922ms;

由此可见不同的数据宽度对8位机的执行速度有着很大的影响,所以在实际使用中应当合理选择变量类型


相关帖子

沙发
sjw1716094642|  楼主 | 2015-3-23 13:04 | 只看该作者
图片怎么没了。。

使用特权

评论回复
板凳
sjw1716094642|  楼主 | 2015-3-23 13:07 | 只看该作者
补一下图片


unsigned char(8位)


unsigned short(16位)


unsigned int(32位)

使用特权

评论回复
地板
ayb_ice| | 2015-3-23 17:24 | 只看该作者
这要看CPU内核,
在32位机上刚好相反呢

使用特权

评论回复
5
mazhao141| | 2015-3-23 18:17 | 只看该作者
本帖最后由 mazhao141 于 2015-3-30 07:40 编辑

感谢分享~

使用特权

评论回复
6
sjw1716094642|  楼主 | 2015-3-23 22:07 | 只看该作者
mazhao141 发表于 2015-3-23 18:17
数据为CPU自然长度时速度最快,这是C入门的知识。楼主你想说的是什么?

有些刚入门的初学者滥用变量,我想提醒一下,我想说的就是这个,你还有什么要问的吗

使用特权

评论回复
7
mazhao141| | 2015-3-23 22:17 | 只看该作者
本帖最后由 mazhao141 于 2015-3-30 07:41 编辑
sjw1716094642 发表于 2015-3-23 22:07
有些刚入门的初学者滥用变量,我想提醒一下,我想说的就是这个,你还有什么要问的吗 ...

感谢分享~

使用特权

评论回复
8
LittleSnowBall| | 2015-3-23 22:49 | 只看该作者
这是处理器原因,不同的位宽会使其计算时间不同

使用特权

评论回复
9
sjw1716094642|  楼主 | 2015-3-23 23:09 | 只看该作者
mazhao141 发表于 2015-3-23 18:17
数据为CPU自然长度时速度最快,这是C入门的知识。楼主你想说的是什么?



测试MUC为STM32F429zit6

使用特权

评论回复
10
sjw1716094642|  楼主 | 2015-3-23 23:11 | 只看该作者
mazhao141 发表于 2015-3-23 22:17
这是为什么呢?你这贴子又没有说明,一楼也说了32位机的情况刚好相反。初学者要是真不懂看了你这个帖子以 ...

看我对一楼的回复,,,速度的确有差。而且我就是针对51的,在51板块,我也没说所有mcu,我也是无语。。。

使用特权

评论回复
11
sjw1716094642|  楼主 | 2015-3-23 23:14 | 只看该作者
mazhao141 发表于 2015-3-23 22:17
这是为什么呢?你这贴子又没有说明,一楼也说了32位机的情况刚好相反。初学者要是真不懂看了你这个帖子以 ...

我在说8位机,你们干嘛扯32位呢,没看见我帖子最后一句话么? “对8位机...”

使用特权

评论回复
12
mazhao141| | 2015-3-23 23:27 | 只看该作者
本帖最后由 mazhao141 于 2015-3-30 07:41 编辑
sjw1716094642 发表于 2015-3-23 23:09
测试MUC为STM32F429zit6

感谢分享~

使用特权

评论回复
13
sjw1716094642|  楼主 | 2015-3-23 23:33 | 只看该作者
mazhao141 发表于 2015-3-23 23:27
你写这么大点的成程序,编译完了都是寄存器变量,是要说明啥?

测试数据处理速度要大程序吗?他们测试CPU不就求个pai吗?你好搞笑,,我说明的是什么都看不懂,就别喷我好吗

使用特权

评论回复
14
mazhao141| | 2015-3-23 23:52 | 只看该作者
本帖最后由 mazhao141 于 2015-3-30 07:41 编辑
sjw1716094642 发表于 2015-3-23 23:33
测试数据处理速度要大程序吗?他们测试CPU不就求个pai吗?你好搞笑,,我说明的是什么都看不懂,就别喷我 ...

感谢分享~

使用特权

评论回复
15
sjw1716094642|  楼主 | 2015-3-24 00:01 | 只看该作者
mazhao141 发表于 2015-3-23 23:52
当然需要。如果是寄存器变量,声明成u8,u16,u32的编译结果是都是一样的~

但我的是自动变量,我不知道编辑器有没有自动设置,也没有找到相关选项,但我没有使用代码优化。即使如此,那你怎么说明8位数据和32位数据的速度差异?

使用特权

评论回复
16
sjw1716094642|  楼主 | 2015-3-24 00:03 | 只看该作者
mazhao141 发表于 2015-3-23 23:52
当然需要。如果是寄存器变量,声明成u8,u16,u32的编译结果是都是一样的~

求你别找什么理由了,没意思,想辩驳,上图

使用特权

评论回复
17
sjw1716094642|  楼主 | 2015-3-24 00:07 | 只看该作者
我原本只是想说51单片机的,抱歉扯上STM32,哎。。

使用特权

评论回复
18
玄德| | 2015-3-24 00:16 | 只看该作者

对51,定义8位比较快,因为51本身就是8位处理器;

对STM32,定义32位比较快。

使用特权

评论回复
19
mazhao141| | 2015-3-24 00:23 | 只看该作者
本帖最后由 mazhao141 于 2015-3-30 07:42 编辑
sjw1716094642 发表于 2015-3-24 00:03
求你别找什么理由了,没意思,想辩驳,上图

感谢分享~

使用特权

评论回复
20
sjw1716094642|  楼主 | 2015-3-24 00:42 | 只看该作者
mazhao141 发表于 2015-3-24 00:23
我没反驳你~我干嘛要反驳你。你又没有错,你只是不知道为什么~你态度不好,所以我不想告诉你是为什么~ ...

我喜欢钻牛角尖,不把我说心服口服,我不会说你的是对的。我这辈子都可能不会学汇编,学完那天我也不知道要多久。我态度差,我也没懂你怎么样个人。总之,我的测试就是那样,我不知道除了turbo c意外的编辑器编辑C代码会是什么效果,你从说我不懂C入门知识到让我学汇编,我服了U。你会汇编的话,那你就打一段代码,做个测试,发个图。空口无凭,就算真理我也不信。我只信实际测试数据

使用特权

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

本版积分规则

个人签名:欢迎加入微控制家园,讨论微控制技术:群号 258891985

24

主题

302

帖子

8

粉丝