历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2021年01月29日 | 新手入门ARM汇编 没你想象的那么难

2021-01-29 来源:eefocus

笔者对C已经有10多年的经验,汇编用的很少。后来因为项目需要转到了ARM。一开始对ARM什么都不懂,看了本《ARM体系结构与编程》也是云里雾里的。但是也许是因为无知者无畏吧,直接就在mdk中建立一个工程,添加了自带的启动文件,然后做了个main函数,里面一个死循环没有操作任何硬件,居然跑起来了。然后以此为基础,慢慢的开始控制GPIO和串口通信。


其实,开发ARM还是很简单的,特别是使用mdk的话,会C语言也就能做一些简单的开发了。不要被那些稀奇古怪的东西给搞糊涂了。边开发边学习,项目做深了,那些东西自然就懂了。


罗嗦这么久,说几点建议吧:


1、ARM的汇编没必要去精通的,能够大概看懂就行了。如果一个速度要求苛刻到需要使用汇编的话,我认为可能你更需要的是转变思路,修改算法,比如使用查表代替计算等;


2、工业控制方面因为有实时性和成本要求,一般不使用操作系统,但需要实现一些内存管理,事件管理,邮箱之类的东西。这些需要时间积累,平时写程序注意尽量通用化,然后建立自己的库,以后再用就很方便;


3、对于公司来说,如果项目很大需要用到操作系统、网络、gui、文件系统等,自己做还不如直接买个板子,人家都已经做好了,而且bug很少,自己只要做应用就行了。量大的话还可以定制,算上开发成本,可能更便宜;


4、现在对于外设一般都有现成的库,建议能不用还是不要用吧。因为想要用好这些库,必须对外设寄存器比较熟悉才行,这时候你自己写一个就行了,而且简单的一个寄存器赋值,函数库往往需要调用一个函数来实现,太奢侈了。但是对于运算库还是要用的,比如DSP库等,毕竟人家写的肯定效率要高点;


5、用好中断,这对51和arm是一样的。能用中断的地方绝对不用轮询,中断是单片机的灵魂,你的所有程序都应该围绕中断展开;


6、学好C语言,注意形成自己的编程风格,起好函数名和变量名,多写注释。不要怕麻烦,这些很重要,我一直认为最好的程序风格是使人不需要看注释就能立刻理解程序的意思也就是:程序即注释;


7、对于C语言,用好指针,如果说中断是单片机的灵魂,那么指针就是C的灵魂;


总之,做ARM和做51差不多,关键还是各种外设的寄存器操作。


推荐阅读

史海拾趣

Fenfa Electronics Ltd公司的发展小趣事

作为一家有社会责任感的企业,Fenfa Electronics Ltd公司始终关注环境保护和社会公益。公司积极推动绿色生产和可持续发展战略,致力于减少生产过程中的能耗和排放。同时,Fenfa还积极参与各种社会公益活动,为当地社区和弱势群体提供帮助和支持。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

Hamlin ( Littelfuse )公司的发展小趣事

在快速发展的同时,Fenfa Electronics Ltd公司始终坚守品质管理的原则。公司建立了严格的质量检测体系,确保每一款产品都符合高标准的品质要求。此外,Fenfa还注重员工的培训和教育,提高员工的品质意识和操作技能。通过这一系列的品质管理措施,Fenfa Electronics Ltd公司的产品质量得到了广泛认可,也赢得了消费者的信赖和口碑。

Diode Laser Concepts公司的发展小趣事

在电子行业日益关注环保的背景下,Diode Laser Concepts公司积极响应,将环保理念融入产品设计和生产过程中。公司采用环保材料,优化生产流程,减少废弃物排放,致力于为客户提供绿色、环保的二极管激光产品。这一举措不仅提升了公司形象,也为公司赢得了更多客户的青睐。

Beta Dyne Inc公司的发展小趣事

Beta Dyne注重企业文化的建设,倡导创新、协作、进取的精神。公司定期组织各类培训和团建活动活动,提升员工的专业技能和团队凝聚力。同时,Beta Dyne还积极引进优秀人才,打造了一支高效、专业的团队,为公司的持续发展提供了有力保障。

泽耀科技(Ashining)公司的发展小趣事

在国内市场取得一定成绩后,泽耀科技(Ashining)开始积极拓展国际市场。公司参加了多个国际电子展会,与国际知名企业建立了合作关系,成功将产品打入国际市场。同时,泽耀科技还积极寻求与国际先进技术的交流与合作,不断提升自身的技术水平和产品质量。

Broyce Control公司的发展小趣事

随着技术的不断升级和产品线的完善,Broyce Control开始将目光投向国际市场。80年代,公司成功打入欧洲市场,为多家跨国企业提供优质的电气和电子产品。随后,Broyce Control又陆续进入北美和亚洲市场,通过设立分公司和建立销售网络,不断提升品牌影响力和市场份额。在国际市场的竞争中,Broyce Control凭借其卓越的产品质量和专业的服务赢得了客户的广泛赞誉。

问答坊 | AI 解惑

音频信号分析仪(全国一等奖论文)

本帖最后由 paulhyde 于 2014-9-15 03:55 编辑 本音频信号分析仪由32位MCU为主控制器,通过AD转换,对音频信号进行采样,把连续信号离散化,然后通过FFT快速傅氏变换运算,在时域和频域对音频信号各个频率分量以及功率等指标进行分析和处理,然后 ...…

查看全部问答>

C51单片机设计模拟I2C总线驱动程序

/********************************** I2C总线驱动 ************************************* 模块名:I2C总线驱动    型号:I2C 创建人:陈曦   日期:2005-6-15 修改人:陈曦   日期:2005-6-19 功能描 ...…

查看全部问答>

大家好!K型热电偶带冷端补偿信号放大电路谁有?

K型热电偶带冷端补偿信号放大电路谁有?…

查看全部问答>

KEIL下 LM3S9B92 将程序搬到SDRAM中运行 有人玩过没

有没有人试过,我现在.SCT中修改链接地址 LR_IROM 0x60000000 0x00030000 {     ;     ; Specify the Execution Address of the code and the&nb ...…

查看全部问答>

请问浮点程序定点化怎么做

是不是可以乘以一个数编程整数后来计算,还是应该怎么处理呢…

查看全部问答>

StreamClassGetPhysicalAddress函数调用出错,求助

windows的StreamClass驱动开发中,在minidriver中调用StreamClassGetPhysicalAddress( pHwDevExt, pSrb, pImage, SRBDataBuffer, &Length ); 返回的物理地址高32位和低32位都是一个很大的值,且与MmGetPhysicalAddress ( pImage )的结果不同,但用 ...…

查看全部问答>

关于红外的程序问题

#include #define uchar unsigned char sbit check=P3^3; uchar irdata[3],irtype,ircount; bit endflag; void init() //程序初始化设置 { irdata[0]=0; irdata[1]=0; irdata[2]=0; irtype=0; ircount=0; endflag=0; } void tim0() ...…

查看全部问答>

51单片机串口通信以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来

/*以16进制发送一个0-65536之间的任一数, *当单片机收到后在数码管上动态显示出来,波特率自定。       */ //我写的程序发送第一个数便成功显示,此后但不行了。。 /*比如说我发fffe  数码管显示65534  &n ...…

查看全部问答>

【求助!】WINCE6.0EBOOT网卡初始化出问题了~~各位大侠帮帮忙!~~~

调试信息如下: Enter your selection: d CS8900: MAC Address: 11:22:33:44:55:66 0x0 ERROR: Probe: EISA NumberError. ERROR: InitEthDevice: Failed to initialize Ethernet controller. ERROR: OEMPlatformInit: Failed to initiali ...…

查看全部问答>

makefile中ipk文件有什么用?

请问:makefile中ipk文件有什么用?     有时执行make时必须提前删除某些ipk文件,否则自己的修改内容就不会被编译,这是为什么呀?ipk文件究竟是干什么用的,有什么作用?     求解,或者给个链接可以找到答案。。。谢谢。 ...…

查看全部问答>