文号
836651
阅读
19007
回复
23
收藏
14
用一种魔性的方法学STM32
2017/07/18
IP:陕西
学习STM32有一段时间了,不得不说STM32真的很强大,无论是内核还是外设。
当然我现在只是皮毛罢了,也就是点点流水灯这种样子。
对于STM32,一般人是这样写的:
1.png
而我使用了不正常的写法:
Capture1.png
能写出来还真是不可思议呢,反正说难不难,说简单不见得。写了两个实验工程,尝试了GPIO,USART,ADC,DAC。

attachment icon STM32.7z 97.69KB 7Z 51次下载
其中那个DAC实验我是想用STM32接收串口数据流放音乐来着,可是现成串口助手不支持那么做,但是想自己编程操作串口有很大困难,所以暂时没办法测试了。
23
0x00000000作者
9年5个月前IP:海南
836701
6楼
引用 张静茹:
楼主的意思是 汇编操作寄存器更加简洁明了吧,对于不懂汇编的人来说,直接用C语言缺失了一点透明感,对于懂汇编的人来说,能直接看透 C语言 库函数的封装直接看到内存操作
其实就是这个意思,同时,在某些地方汇编是有用的。比如某些算法的优化。
引用
评论
0x00000000作者
9年5个月前IP:海南
836702
7楼
引用 amo:
建议不要装这种B……
点开人家C例程的反汇编窗口,你会发现一点便宜都没占到
其实是占到了,那库编写有多大,用汇编又有多大?我这些文件只有1KB多一点的指令大小,其中中断向量表就占了不小的空间。
而且如果汇编没有用,为什么ST官方的编程指南是讲解汇编指令为主的?为什么编译器有内嵌汇编功能?为什么某些Cortex-M3的开发书籍用了不小的篇章讲解汇编编程方法?
也许你会说开优化可以提高代码密度和效率,不过编译器不是人,只会按照相对固定的方式汇编高级语句,而自己可以根据程序的实际要求组织指令达到目的。而且有的代码开了优化就不能正常工作了。
引用
评论
0x00000000作者
9年5个月前IP:海南
836703
8楼
引用 rb-sama:
用ARM汇编操作寄存器偏移地址能写出来,似乎并没有什么不可思议的地方?
ST的官库只是用struct指针的方式写了而已。
你会错意了,我的意思是原来我觉得汇编很难,对我来说基本不可能,不过现在我感觉其实也没有那么难。
其实要不是正好有《微机原理》这门课,我说不定还在玩MCS-51,就算是用,也会直接用C。
引用
评论
0x00000000作者
9年4个月前IP:海南
836761
11楼
引用 amo:
参考你的程序,找了个库函数例程里类似的点灯例程,编译结果如下图所示,看你占了什么便宜:
使用库函数的点灯例程.png
呵呵,你那只是简单的GPIO操作,就占了那么多东西。我的一个工程,里面有GPIO,AFIO,USART,ADC的使能和调用,还有简单的低通滤波算法,才比你这个多了100多bytes,而且我要是愿意,完全可以再牺牲可读性再优化掉50bytes没问题。
引用
评论
0x00000000作者
9年4个月前IP:海南
836762
12楼
引用 amo:
参考你的程序,找了个库函数例程里类似的点灯例程,编译结果如下图所示,看你占了什么便宜:
使用库函数的点灯例程.png
而且那么简单的一点东西,看不出什么的。以后程序大了,操作复杂了,差距就有了。而且不见得一定就在空间取胜,有时候是速度快了。
不然怎么都说ASM效率高,或是体积小呢。
反正既然存在,既然还有被提起,肯定还有很重要的用处,你就算在怎么斗嘴都改变不了事实。
引用
评论
0x00000000作者
9年4个月前IP:海南
836840
18楼
引用 牛逼大仙:
想想如果以后上班了,你跳槽了,同事接手看不懂汇编肯定会说MMP~
为啥我会爆粗口?
因为前一阵帮忙填坑坑死了。
我只是为了娱乐而汇编,深层次了解原理罢了。汇编对我不是负担,就像那些《英雄联盟》之类的游戏对于普通人怎么玩都不累那样,对于我就是玩,就是消遣好吗。要是写代码为了工作,我当然会用库函数了。但自己私底下的娱乐,没有人管得着吧?
引用
评论
0x00000000作者
9年4个月前IP:海南
836841
19楼
引用 single2339:
不知道楼主是否是学生,学生就无所谓了。
鄙人搞了十多年软件工程相关工作,坦率讲所有工作里面最头痛的就是阅读别人写的阅读性差的代码。

高级语言的发展目的就是让人能够更好地阅读代码,提高生产效率,单纯的……
我只是为了娱乐而汇编,深层次了解原理罢了。汇编对我不是负担,就像那些《英雄联盟》之类的游戏对于普通人怎么玩都不累那样,对于我就是玩,就是消遣好吗。要是写代码为了工作,我当然会用库函数了。但自己私底下的娱乐,没有人管得着吧?
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的