搜索
bottom↓
回复: 12

大家学习STM32时会花很多精力去学习CM3底层架构吗

[复制链接]

出0入0汤圆

发表于 2008-4-11 08:04:51 | 显示全部楼层 |阅读模式
  小弟新学STM32,惊喜地发现这里已经高手如云了,斗胆想问这个有点钻牛角尖的问题,因为我以前学ARM也花了不少时间在底层的文档上。我在看Coretex M3的Technical Reference Manual时,发现它的指令集跟ARM7,ARM9的很不同,有很多新指令,还有很多新理念,尤其是bit-banding和中断处理。我觉得如果这些特性利用得充分能很大程度上提高性能。
  我印象最深的有一个指令是返回某寄存器的值中前导0的个数,叫CLZ.W。这让我突然想起uC/OS2的调度中就绪位图查找表,我感觉这个指令能完成以前需要查表才能做的事。现在uC/OS2能在CM3上跑了,可有网友指出移植有问题,在CtxSW中会破坏R4,R5的值。我不知道这个移植中是否利用了CM3的诸多新特性。
  官方提供的固件库(包括我以前用的AT91SAM7s的),基本上都是以查询为驱动的,经常有"while (xxx!=#) ;"之类有可能绕死的结构,一看就觉得像是需要OS支持的。现在已经有RTOS被移植到CM3上了。可我觉得如果不是为CM3量身定制而重新写过的,根本无法发挥CM3的卓越处理性能。
    固件库很好很强大,C编译器也把底层包装得天衣无缝,确实不必了解这些基础设施的东西了吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-8-11 13:51:10 | 显示全部楼层
以下蓝色文字由版主:bluelucky 于:2008-08-11,13:51:10 加入。
<font color=black>请发贴人注意:
本贴放在这分区不合适,即将移走
原来分区:[1032]ARM技术论坛
即将移去的分区:[3011]Cortex-M3技术讨论区
移动执行时间:自本贴发表0小时后

任何的疑问或咨询,请可随时联系站长。谢谢你的支持!
</font>

出0入0汤圆

发表于 2008-11-15 23:59:48 | 显示全部楼层
如此好贴&nbsp;无人理会



我个人喜欢先上手尝试一下,然后在随着实践的增多而逐渐深入研究

可惜往往是实践(或者是跑了几个demo)后,就觉得已经入门,而忽视的理论的学习。就停留在了肤浅的层面、

随表说句,钦佩那些深入研究基础的人,扎实,深刻。

出0入0汤圆

发表于 2008-11-16 20:25:40 | 显示全部楼层
是好贴,潜心下来研究当然好了,有时就是没那个时间啊

出0入0汤圆

发表于 2008-11-16 21:47:06 | 显示全部楼层
【2楼】&nbsp;heydonkey&nbsp;

可惜往往是实践(或者是跑了几个demo)后,就觉得已经入门,而忽视的理论的学习。就停留在了肤浅的层面、



同感呀

出0入0汤圆

发表于 2008-11-17 08:44:16 | 显示全部楼层
我觉得熟悉下相关的寄存器就可以了,其他的就不怎么看了,我是用C编程,又不是用汇编,没必要搞那么复杂。



用C编程,重要的是程序的结构和一些思路、算法。

出0入0汤圆

发表于 2008-11-17 09:08:18 | 显示全部楼层
有时候在调试的过程中有些莫名其妙的问题弄不清楚,

最后一翻书本,原来就是自己当初跳过去没仔细研究过的东西,那时候真是“痛心疾首”

“从做中学”是必要的,但是一定是从&nbsp;“做”&nbsp;中&nbsp;“学”!

出0入0汤圆

发表于 2008-11-17 13:37:06 | 显示全部楼层
我没有用官方的函数&nbsp;&nbsp;&nbsp;自己控制寄存器,这算。。

出0入0汤圆

发表于 2008-11-18 10:18:17 | 显示全部楼层
有时候用官方的FW库,会死的很难看的。

不管怎么说,包装了的东西,总会对速度有影响的。即使设计得再好,也难免没有直接操作效率高。

如果实效性要求不高,可以使用官方的FW,否则还是自己直接从底层设计吧。毕竟是一个产品一个

样的,没有必要嫌设计的麻烦,而给以后留下更多的麻烦。



以周立功的ARM板为例(LPC2290),以下的是我测试的:



gpio_set和gpio_clr的执行时间:6us

IO口直接设置和复位:1us



那么如果是模拟某些时序的话,还是用直接操作IO口比较合适。

假设是串行发送一个字节,如果最快的情况下,



使用函数&nbsp;&nbsp;&nbsp;&nbsp;6×8×2=96us

直接设置IO&nbsp;&nbsp;1×2×8=16us

出0入0汤圆

发表于 2009-4-6 10:30:53 | 显示全部楼层
2楼说的太牛!!!! 超级好的回帖啊!!!说的太对了!!!!!

出0入0汤圆

发表于 2009-4-6 10:37:57 | 显示全部楼层
从厂商的角度来说M3也好UC3也好,都是希望用户能快速开发,所以对底层封装进行深度的处理,所以国内所谓“短平快”的项目,可以不了解内核体系照样开发。
但是,像我们要写书或者做一个有深度的项目就要研究了,有时候很诡异的问题,就是多级流水线在搞鬼~
所以很多时候研究的深浅基于你的目标。个人的喜好和正式开发有很大区别的。

出0入0汤圆

发表于 2009-4-6 12:31:23 | 显示全部楼层
"现在uC/OS2能在CM3上跑了,可有网友指出移植有问题,在CtxSW中会破坏R4,R5的值。我不知道这个移植中是否利用了CM3的诸多新性"。

为什么会这样呢 ?下面是zlg提供的UC/OS模板中OSCtxSw的代码


OSCtxSw
    PUSH    {R4, R5}
    LDR     R4, =NVIC_INT_CTRL                                          ;  trigger the PendSV exception
                                                                        ;  触发软件中断
    LDR     R5, =NVIC_PENDSVSET
    STR     R5, [R4]
    POP     {R4, R5}
    BX      LR

有一点比较迷惑  STR     R5, [R4]触发PendSV中断以后,自动入栈的的PC是POP{R4,R5}么?换句话说,触发PendSV以后是立刻进入中断步骤(入栈、取地址、进入中断程序)还是要在执行一到两条指令在进入中断步骤。

但是无论如何,都应该不会破坏R4,R5(无论中断在POP{R4,R5}之前进入,还是中断在BX LR之前进入,都不会破坏返回到该任务以后的R4,R5的值)。

出0入0汤圆

发表于 2009-4-6 13:04:52 | 显示全部楼层
玩玩了,还未深入..
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-16 15:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表