3555|9

53

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

单片机用汇编语言的问题 [复制链接]

我做的项目本来用ATmega128去驱动SSD1289的屏幕时,使用的是UTFT的代码,结果显示速度不能令人满意。后来发现有人说使用汇编会快一些,后来证实了这个是正确的。
所以我想问,有没有会写关于I2C和SPI的汇编代码?这样能不能使得SD卡读写速度、I2C传输速度变快。
还有C和汇编相比,为什么汇编会快?
此帖出自单片机论坛

最新回复

程序结构与运行效率的关系非常密切,但具体怎么改,这个可就不是随便说说你就能明白的。软件工程这门课从学习、理解到应用也需要一个长期过程,更需要编程者坚持理性分析和经验的积累。 怎么做不重要,重要的是知道为什么要这么做。  详情 回复 发表于 2013-10-9 19:02
点赞 关注
 

回复
举报

6040

帖子

197

TA的资源

版主

沙发
 
通常情况下,限制SPI和I2C的速度的不是语言,而是硬件本身。一般I2C速度不允许超过400K,SD卡的SPI不能超过25M。
此帖出自单片机论坛

点评

如果能达到这个速度那是可以的,但是总觉得自己用C写出来的代码使用后达不到这个理论上的速度。 比如像我所说了用汇编写的SSD1289驱动函数和C写的相比快了好几倍。  详情 回复 发表于 2013-10-7 13:22
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发lcofjp 的帖子

如果能达到这个速度那是可以的,但是总觉得自己用C写出来的代码使用后达不到这个理论上的速度。
比如像我所说了用汇编写的SSD1289驱动函数和C写的相比快了好几倍。
此帖出自单片机论坛

点评

如果用软件模拟的SPI速度可能要有差别。如果用硬件SPI的话,差别应该不会很大。 C语言的通常效率是很高的,应该能达到完美汇编的70%以上,绝对达不到倍数关系。  详情 回复 发表于 2013-10-7 14:07
 
 
 

回复

6040

帖子

197

TA的资源

版主

4
 

回复 板凳第七天魔王 的帖子

如果用软件模拟的SPI速度可能要有差别。如果用硬件SPI的话,差别应该不会很大。
C语言的通常效率是很高的,应该能达到完美汇编的70%以上,绝对达不到倍数关系。
此帖出自单片机论坛
 
 
 

回复

1万

帖子

140

TA的资源

版主

5
 
汇编语言只要使用得当运行效率是最高的,特别是在接近硬件极限速率时,但这有个前提就是必须具有良好的程序结构,C语言同样也有结构问题,效率差别巨大时说明编程本身有问题。关于什么样的程序结构运行效率更高,可以去学习一下系统工程这门课,但程序结构水平的提高不是朝夕之功可成,需要长期的学习、思考和实践。
说实话,现在这个年头,硬件运行速度越来越快、越来越便宜,追求程序结构的优中再优已不再是绝大多数程序员的追求了,甚至包括微软这样的公司也同样。想当年(1980s)追求程序运行效率和短小精干可是程序员们普遍追求的最高境界,不但西方国家如此,我们当年在校时也同样如此,几十行的小程序都要绞尽脑汁比比看谁的程序运行的最快、程序最短,哪怕只胜出一个机器周期或一个字节。我至今还保存着两张360K的5寸软盘,上面拷贝的是全美1988年最佳100个实用小程序,100个DOS下的可执行文件的总容量不到720K!
此帖出自单片机论坛

点评

您的意思我是可以通过修改代码的结构(并非一味的从C转汇编)来显著提高代码的效率? 比如收我现在单片机ATMEGA128上的SD卡的使用:使用的文件系统是FATFS,是别人的源代码我只是简单的移植和使用,如何提高效率难  详情 回复 发表于 2013-10-9 09:28
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼chunyang 的帖子

您的意思我是可以通过修改代码的结构(并非一味的从C转汇编)来显著提高代码的效率?
比如收我现在单片机ATMEGA128上的SD卡的使用:使用的文件系统是FATFS,是别人的源代码我只是简单的移植和使用,如何提高效率难道要修改别人的源代码,自认为现在还没有这样的水平,还是从SPI的传输和接收方法入手?
此帖出自单片机论坛

点评

程序结构与运行效率的关系非常密切,但具体怎么改,这个可就不是随便说说你就能明白的。软件工程这门课从学习、理解到应用也需要一个长期过程,更需要编程者坚持理性分析和经验的积累。 怎么做不重要,重要的是知道  详情 回复 发表于 2013-10-9 19:02
只会copy别人的代码是不会有长进的. 懂原理了就会有想法,引入spi中断;dma传输;开缓冲区轮换写入;简化fs;多得很呢....  详情 回复 发表于 2013-10-9 09:37
 
 
 

回复

4005

帖子

0

TA的资源

版主

7
 

回复 6楼第七天魔王 的帖子

只会copy别人的代码是不会有长进的.
懂原理了就会有想法,引入spi中断;dma传输;开缓冲区轮换写入;简化fs;多得很呢....
此帖出自单片机论坛

点评

fatfs里的spi初始化就把SPIE位置0了没有开启中断,这我知道。 但我现在就担心自己写的方法不能很好的和别人的源代码结合,导致一些功能上的错误。 我会慢慢尝试修改的,不过还有很多要学习。  详情 回复 发表于 2013-10-9 11:12
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼huo_hu 的帖子

fatfs里的spi初始化就把SPIE位置0了没有开启中断,这我知道。
但我现在就担心自己写的方法不能很好的和别人的源代码结合,导致一些功能上的错误。
我会慢慢尝试修改的,不过还有很多要学习。
此帖出自单片机论坛

点评

庞大的程序不可能用汇编做,想办法把while都切掉就快了.  详情 回复 发表于 2013-10-9 12:43
 
 
 

回复

4005

帖子

0

TA的资源

版主

9
 

回复 8楼第七天魔王 的帖子

庞大的程序不可能用汇编做,想办法把while都切掉就快了.
此帖出自单片机论坛
 
 
 

回复

1万

帖子

140

TA的资源

版主

10
 

回复 6楼第七天魔王 的帖子

程序结构与运行效率的关系非常密切,但具体怎么改,这个可就不是随便说说你就能明白的。软件工程这门课从学习、理解到应用也需要一个长期过程,更需要编程者坚持理性分析和经验的积累。
怎么做不重要,重要的是知道为什么要这么做。
此帖出自单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表