历史上的今天
返回首页

历史上的今天

今天是:2025年01月23日(星期四)

正在发生

2020年01月23日 | 【ARM】ARM程序规范

2020-01-23 来源:eefocus

1.函数名单词之间用_隔开,每一个字母大写

 

   Uart_Printf()

   //这个由三星的TEST风格延续下来,因此没有参数时,必须加void,否则ADS会编译报警

   void Test_Keyscan(void);

 

2.寄存器名前要带小写的r。表示寄存器,大写名称要与DataSheet标的名一致..其宽度要根据硬件有效位来定义,其中必须带volatile关键字

 

   有效位大于16位

   #define rGPMCON          (*(volatile unsigned *)(0x7F008820))

   有效位小于等于16位,大于8位

   #define rWTCON         (*(volatile unsigned short*)(0x7E004000))

   有效位小于等于8位

   #define rNFDATA8    (*(volatile unsigned char *)(NANDF_BASE+0x10))

 

3.寄存器对位赋值的写法。

   格式:  寄存器名 =               //寄存器名解释

                  (值 << 位移)   //每位的解释: 对应值的解释

                | (值 << 位移)  //每位的解释: 对应值的解释

 

   注意象 (0<<12)等于没写,但是这样的写法起到占位的作用,表示12位为0.

例:

   rCIWDOFST = // Set window offset register

   (0<<31) // window offset - 1: Enable, 0: No Offset

   |(0<<16) // Window horizontal offset1

   |(0<<0)); // Window Vertical offset1

 

4.寄存器赋连续超过两位时要考虑清零问题.

 

   rGPKCON0 |= (10 << 30);

   这里的本意是把30,31两位置成10。但是假设原来的30位为1.这个表达式的结果变成设11了。

   因些标准写法是 ,先清零,再置。

   rGPKCON0  = (rGPKCON0 & ~(3 <<30)) |  (10 << 30);  

 

   如果需要清零位太多,不如一开始赋0值再来加比较简洁,保险。  

   unsigned int val = 0;

   rGPKCON0 |= (10<<30) | (10 <<2) ;

 

5.一组相关值是定义成enum好还是宏定义好?

   从硬件角度是定义成宏定义好。

   一般硬件定位一组值不一定连续。如下定义。

   #define  CONST_VAL1  (0x00)

   #define  CONST_VAL2  (0x01)

   #define  CONST_VAL3  (0x02)

   #define  CONST_VAL3  (0x04)

   如果用enum容易笔误成连续值,而且因为不直观,在代码检查时不太容易查出来。

   当然可以手动赋值了,但就失去了enum的优点了。


推荐阅读

史海拾趣

Dicon Fiberoptics Inc公司的发展小趣事

作为一家具有高度责任感的企业,DiCon长期以来一直致力于为国防工业提供高质量的光纤通信产品。公司的首批产品之一FDDI交换机在许多海军舰艇上部署了30多年,为国家的安全稳定做出了重要贡献。这一里程碑事件不仅彰显了DiCon在光纤通信技术领域的实力,也进一步提升了公司的品牌形象和市场地位。

极海半导体(Geehy)公司的发展小趣事

DiCon Fiberoptics Inc公司成立于1986年,当时的光纤通信技术正处于快速发展阶段。公司创始人凭借对行业的敏锐洞察和坚定信念,决定投身于这一领域。在创业初期,公司面临着资金紧张、技术壁垒高等诸多挑战。然而,通过不懈努力和持续创新,DiCon成功研发出了多款高性能的光纤通信产品,逐渐在市场上获得了认可。

Gowanda Electronics公司的发展小趣事

DiCon Fiberoptics Inc公司成立于1986年,当时的光纤通信技术正处于快速发展阶段。公司创始人凭借对行业的敏锐洞察和坚定信念,决定投身于这一领域。在创业初期,公司面临着资金紧张、技术壁垒高等诸多挑战。然而,通过不懈努力和持续创新,DiCon成功研发出了多款高性能的光纤通信产品,逐渐在市场上获得了认可。

Gilway Technical Lamp公司的发展小趣事
制冷剂是制冷系统中的重要介质,如果制冷剂泄漏,制冷效果将大打折扣甚至完全失效。
EECO Switch公司的发展小趣事

1993年,Transico公司收购了EECO Switch部门,这标志着EECO Switch公司进入了一个全新的发展阶段。在被收购后,EECO Switch获得了更多的资源和支持,进一步加速了其业务拓展的步伐。公司不仅在原有的人机界面产品领域继续深耕细作,还积极拓展新的业务领域,如智能家居、物联网等。

Hpc Technology Inc公司的发展小趣事

1993年,Transico公司收购了EECO Switch部门,这标志着EECO Switch公司进入了一个全新的发展阶段。在被收购后,EECO Switch获得了更多的资源和支持,进一步加速了其业务拓展的步伐。公司不仅在原有的人机界面产品领域继续深耕细作,还积极拓展新的业务领域,如智能家居、物联网等。

问答坊 | AI 解惑

ccd资料包

飞思卡尔智能车上用的ccd摄像头…

查看全部问答>

SPCE061A凌阳单片机编程红外遥控

我要做基于SPCE061A凌阳单片机红外遥控比赛计分器的设计, 需要软件编程红外识别,利用LED模组能显示比分,我需要知道利用的遥控器的名称和C编程的程序。重谢,有能帮我做的可以加QQ330254876讨论,重谢。…

查看全部问答>

【开发故事】DLP投影仪:坚持20年不放弃的男人

  不多的文章,与大家分享下:你有你的开发故事么?   美国德克萨斯州最大的城市达拉斯。在这个有着牧牛和牛仔历史的城市里,一项技术宣告诞生。这项技术在很长时间里“养在深闺人未识”,甚至一度处于行将消亡的境地。然而,凭借一个 ...…

查看全部问答>

哪类应届毕业生最受欢迎? 毕业生比拼职业技能

新一轮毕业生招聘季节即将到来,今年就业形势依然严峻。用人单位不仅要求大学生学习成绩好、在校表现好,还要求各方面的综合能力强,因此——     毕业生比拼职业技能     2009年的校园招聘大战已初露端倪,一家知名人才网 ...…

查看全部问答>

那位朋友知道那里能搞到RIL.lib的源代码?

我装了Platform Builder CE 6.0 ,在CellCore文件夹下也找到了RIL层的源程序,但是我却没找到RIL.lib中函数的实现,也就是Ril.def中定义的导出函数。比如: RIL_Initialize               &nbs ...…

查看全部问答>

发个最新构思和大家讨论讨论

本人一直很喜欢下载东西,verycd.com更是天天上,还喜欢上xunlei.com找软件 而且经常成夜成夜的挂着电脑,挂着迅雷, 电费不用说, 因为用P2P硬盘都坏掉几个, 数据吞吐量大概每天2G到10G, 看电影只看DVD高清晰版的, 装软件只下完整版的, 由于做软 ...…

查看全部问答>

AT+CMGS很慢,为什么?

我用MC39i发送PDU短信,在AT+CMGS这一步的时候很慢,要3、4秒才能出现\">\",为什么呢?有什么方法加快速度吗? 我看过别人也是用MC39i,但是一般1秒之内就可以发送出去了,怎么会差这么远呢?…

查看全部问答>

100分相送,如何在dopod818 PPC上注册蓝牙串口通讯???

如题:如何在dopod818 PPC上注册蓝牙串口通讯??? 主要的目的是想让GPS通过蓝牙控制dopod818手机发送/读取短信,和读取电话本信息,现在有的手机像dopod818没有蓝牙串口服务,要自己实现注册串口服务,然后通过打开串口进行通讯和发送AT命令来实 ...…

查看全部问答>

STR912怎么清串口中断标志?keiluv3和uv4居然不一样?

UART_ClearITPendingBit函数 uv3中是 void UART_ClearITPendingBit(UART_TypeDef* UARTx, u16 UART_IT) {   /* Clear the specified interrupt */   UARTx->ICR &= UART_IT; } uv4中是 void UART_ClearI ...…

查看全部问答>