打印
[技术讨论]

ZENYIN同学,用汇编初步搞定了STM32F4

[复制链接]
4280|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zenyin|  楼主 | 2016-10-22 16:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在ARM时代已经很少人用汇编了,ZINYIN现在做技术管理,下面小兄弟常常回说,程序处理不过来,而且还是人机界面,我问孩子们程序多大,他们说几百K,吓死宝宝了,我说一般几百个字节程序就够了啊,于是我叫孩子们编就编一条程序  A=0X7F  就这么一条高级语言,高级语言叙述上也是老鼻子长 编完以后机器码长度20K,太恐怖,试想一下,我们做项目有多少时候程序有20K的,所以我决定自己尝试一下
        

写多字大家就不想看了,分个段

相关帖子

沙发
zenyin|  楼主 | 2016-10-22 16:50 | 只看该作者
怎么才能知道程序运行了呢,我决定搞一个秒表,用2只发光二极管的闪烁来验证程序的正确性!到了我们这把年纪,要从头开始,其实挺难,好在ZENYIN 51单片机水平非常非常强,而且自己一直在设计单片机,会用单片机还要理解取指译码操作一套东西,所以学起CM3内核还蛮快,也没感觉CM3内核有太多的过人之处,觉得自己也想得到,比方说哈弗结构和普林斯结构各有优点,在CM3中把二者都用上了,还有流水线取值,取值可以进行简单的线性处理,还有CM3本身不完全是一个CPU 人家还有CTC 滴答时钟和NVIC中断向量控制器的。


再分个段接到说:

使用特权

评论回复
板凳
长的帅怪我落| | 2016-10-22 16:50 | 只看该作者
插眼,顺便占楼

使用特权

评论回复
地板
zenyin|  楼主 | 2016-10-22 17:03 | 只看该作者
本帖最后由 zenyin 于 2016-10-24 11:02 编辑

一个值得点赞的是CM3把地址统一编址,内部含有多条总线,总线之间可以交叉,这样做起来,就具有哈弗和普林斯结构共同的优点,既解决数据吞吐的瓶颈和难以形成病毒,又具有统一编址这种存储器规划的仿真灵活性,而且最值得点赞是,CM3给存储器管理画出了粗的轮廓,在配上滴答时钟,这样就特别适合灌入操作系统,在不同生产厂家的芯片间程序移植。还有就是中断加速是做的最好的,特别是“迟来”和“尾连”做的非常好,这需要硬件配合软件才能支撑, 其中EXC_RETURN对应一个极限的高位地址,想比这里应该是一个固件,利用统一固件来处理中断退出的事情比较好办!比方说,“尾联”最好用软件实现-----51单片机也可以用软件实现“尾联”,但要“迟来”软件就很难实现,硬件层面上我认为它用得是优先编码器。

使用特权

评论回复
5
zenyin|  楼主 | 2016-10-22 17:18 | 只看该作者
指令上其实没有什么过人之处,基本就是无累加器瓶颈的51单片机指令扩展,反减法和反序指令是亮点,乘加和除法指令很强大,而且是指令速度还很快,在一个优点是标志位可由用户来决定要不要输出,AVR单片机就特别繁,这一点偷师了PIC单片机,又有51那种只有运算指令才改变标志的简捷,更牛的和51单片机一样更强大的位带操作,不过满腐败的。连接寄存器LR的存在,所以中断和子程序就全部纳入到跳转里解决了,对于具有流水线的MCU而言,跳转是一个永远的疼,因为跳转意味着指令队列中预取值将失效,CM3加了预测,那么我们编程序的时候,就要注意了,预测默认是要跳转。所以要把我们的核心处理块配置在要跳转的地方,这样让“预测总是正确的”。遗憾的是51这样指令DJNZ CJNE 指令没有了,AVR作为精简指令集都有跳转流水线请款的尴尬,但AVR发明了跳步这个不错,能缓解跳转都不快的缺憾。

使用特权

评论回复
6
zenyin|  楼主 | 2016-10-22 17:22 | 只看该作者
本帖最后由 zenyin 于 2016-10-24 11:03 编辑

在取值的同时对数据进行线性预加工,+-移位特别值得点赞!但要说用一个硬件工程师去做,就不会如此破费,比方说32位寄存器只用1位,其它全是空白,对于硬件工程师而言,心颠颠都会疼
大概就想到这么多。

使用特权

评论回复
7
zenyin|  楼主 | 2016-10-22 17:32 | 只看该作者
大家知道CM3只是内核,对于内核而言程序只限于在寄存器里面操作,所以学完以后ZENYIN开始编程和软仿真,目标是熟悉指令系统和特别是汇编语法,和51的区别是,标号要定格写,且不要冒号,而且16进制数要用0X.....表示,语法习惯上还是“主谓宾”--指令目的操作数,德州的430比较别扭 是主宾谓---命令,操作数,地址------ZENYIN分析,德州的430单片机为什么这样,因为德州430是寄存器指令精简,其他指令是复杂指令集,430估计内部没有流水线,所以只能把操作数提前,但430却把跳转指令做得很快,但中断做的非常慢,以笔者角度看 德州430出自电子硬件工程师之手,能省则省,省下来的一心一意做低功耗。这点PIC单片机更是,而AVR单片机更像一个标准规矩严谨的工程师有板有眼的在设计,严谨又余,灵活性不足。

使用特权

评论回复
8
zenyin|  楼主 | 2016-10-22 17:44 | 只看该作者
走完这一步,就进入STM32F4芯片层了,要学汇编语言其实满麻烦的,本来就人少,而且所有网上提供例程,拷贝下来都无法通过编译,原因都有语法错误,还有一个原因,有两种开发平台,二者也不能互相拷贝,所有ZINYIN又进行了一次长征,一点点摸索,最终想达到这样一个目的
========像51单片机编程一样,开篇就编指令,什么伪指令什么编译说明,什么定义全部不要,搞了半个多月,竟然被我误打误撞搞定了,我写了一个典型例程发表在STM那个论坛上,还给出一个电子钟的演示程序,非常的精炼,程序非常少,比51单片机一个初始化程序都还要少,当电子钟闪烁起来时候,这月球上的一小步就是今后ZENYIN人生的一大步,我希望再经过半个月的时间,将STM32所有驱动程序用汇编语言编制完,加上说明,构成一本书,对自己只需要裁减就可以完成项目编程,对大家我希望他就是一本最全使用手册,乐观估计其程序总量不会超过4K-----对应指令条数1000条,用C语言编程真是太费代码和时间和空间了。

使用特权

评论回复
评论
王奉瑾 2016-10-23 13:54 回复TA
友情建议,这个路走得不好玩,换条路吧,哈哈 
9
zenyin|  楼主 | 2016-10-22 17:45 | 只看该作者
车来接了了,周一见!

使用特权

评论回复
10
xinxi| | 2016-10-22 18:28 | 只看该作者
书多少钱,有几册? 我预订一套。我喜欢汇编

使用特权

评论回复
11
玄德| | 2016-10-22 19:10 | 只看该作者

汇编也写过十多万行。

使用特权

评论回复
12
huarana| | 2016-10-22 21:57 | 只看该作者
然而 STM32F4  是 CM4内核

使用特权

评论回复
13
icecut| | 2016-10-22 23:37 | 只看该作者
如果是我.肯定会改 c 语言,编译器没那么傻,一条指令20k....
肯定是错误的加入了初始化文件

使用特权

评论回复
14
linqing171| | 2016-10-23 00:21 | 只看该作者
icecut 发表于 2016-10-22 23:37
如果是我.肯定会改 c 语言,编译器没那么傻,一条指令20k....
肯定是错误的加入了初始化文件 ...

keil里面用错了哪个初始化文件能把hex弄到2k以上?

使用特权

评论回复
15
wuhuikai| | 2016-10-23 09:22 | 只看该作者
huarana 发表于 2016-10-22 21:57
然而 STM32F4  是 CM4内核

哈哈

使用特权

评论回复
16
icecut| | 2016-10-23 09:24 | 只看该作者
linqing171 发表于 2016-10-23 00:21
keil里面用错了哪个初始化文件能把hex弄到2k以上?

那他在骗人?难道是加入了库文件,还关闭优化?

使用特权

评论回复
17
sherwin| | 2016-10-23 09:49 | 只看该作者

点赞!顶一把   

使用特权

评论回复
18
犹豫的大三| | 2016-10-23 10:22 | 只看该作者
可以把几百K的程序缩减到那么小?
不会用汇编,瞅瞅如何实现的

使用特权

评论回复
19
宇容创行| | 2016-10-23 11:39 | 只看该作者
天天写脚本的飘过

使用特权

评论回复
20
zenyin|  楼主 | 2016-10-24 09:37 | 只看该作者
ZENYIN喜欢开门见山,什么头文件,什么包含文件什么标准配置文件,什么隐射文件,什么启动程序,统统在ZENYIN这种搞汇编人眼里都是垃圾,最好的启动,就是无启动,最好初始化就是无初始化,最好最可靠的最安全的电子元件,就是没有元件,这是电子行业最经典的广告语

使用特权

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

本版积分规则

90

主题

393

帖子

5

粉丝