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的优点了。
 

原文出处
 
 

【ARM】ARM程序规范的更多相关文章

  1. 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  2. 使用tftp给ARM下载程序

    使用tftp给ARM下载程序 1.开发板和主机能够ping的通 前提:要把计算机的防火墙关了,不然就会出现下面这种情况 如果电脑连接的无线网,那么设置本地连接的ip设置为固定ip.Ip地址和开发的ip ...

  3. arm裸机程序启动流程

    arm裸机程序启动流程 1373 Linux系统的引导: 一个SOC拿过来,它是有内部BROM和SRAM的,这个BROM中会固化芯片厂商的最初引导代码,我们叫它RBL(ROM boot loader) ...

  4. 服务器编程入门(5)Linux服务器程序规范

    问题聚焦:     除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范.     工欲善其事,必先利其器,这篇主要来探 ...

  5. Linux 高性能服务器编程——Linux服务器程序规范

    问题聚焦:     除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范.     工欲善其事,必先利其器,这篇主要来探 ...

  6. linux高性能服务器编程 (七) --Linux服务器程序规范

    第七章 LInux 服务器程序规范 1)linux服务器程序一般以后台进程形式运行.后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰.守护进程的父进程通常是init进程(PID为1的进 ...

  7. 【转载】eclipse调试arm裸机程序

    一.集成开发环境 软件部分:eclipse , GDB Server , Jlink软件 硬件部分:Jlink硬件 准备工作1:从SD/NOR Flash启动,格式化nand flash 准备工作2: ...

  8. 第008课_第1个ARM落版程序及引申

    form:第008课_第1个ARM裸板程序及引申 第001节_辅线1_硬件知识_LED原理图 当我们学习C语言的时候,我们会写个Hello程序.那当我们下ARM程序,也该有一个简单的程序引领我们入门, ...

  9. IMX6开发板qt creator直接编译ARM架构程序

    除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtc ...

随机推荐

  1. Distributed systems theory for the distributed systems engineer

    Gwen Shapira, SA superstar and now full-time engineer at Cloudera, asked a question on Twitter that ...

  2. 第一次使用Mac

    Mac禁用掉默认输入法 搜狗输入法已经包含中文.英文输入法了,其余输入法可以删除掉.按ctrol键的时候本来应该是搜狗输入法中英文切换,结果却是搜狗输入法和ABC输入法之间互相切换. 打开键盘偏好设置 ...

  3. 寻找自己的道路——与技术同胞共勉 一种划分为七个阶段的道路:自信=>意志=>布局=>切入点=>团队=>渠道=>产品

    寻找自己的道路——与技术同胞共勉 每个人的幸福都是不一样的.我喜欢田园式的生活,在人多的地方总是不舒服. 对我来说,最幸福莫过于在工作中做着自己喜欢的事情.闲暇时,在能够眺望江边的地方,端着一杯红酒, ...

  4. magento直接操作数据库

    查:     $read = Mage::getSingleton("core/resource")->getConnection('core_read');     $sq ...

  5. 创建在“system.net/defaultProxy”配置节中指定的Web代理时出错解决办法。

    出现这种问题会有很多原因,大致解决方法 方法1:在CMD下输入netsh winsock reset命令 简单来说netsh winsock reset命令含义是重置 Winsock 目录.如果一台机 ...

  6. 图片标注工具LabelImg使用教程

    1.进入labelImg-master文件夹,在空白处使用 “Shift+鼠标右键” ,选择在此处打开命令窗口,依次输入下面语句即可打开软件. pyrcc4 -o resources.py resou ...

  7. 一步一步掌握java的线程机制(一)----创建线程

    现在将1年前写的有关线程的文章再重新看了一遍,发现过去的自己还是照本宣科,毕竟是刚学java的人,就想将java的精髓之一---线程进制掌握到手,还是有点难度.等到自己已经是编程一年级生了,还是无法将 ...

  8. cucumber java从入门到精通(4)Scenario Outline及数据驱动

    cucumber java从入门到精通(4)Scenario Outline及数据驱动 到目前为止,我们的TodoList类工作良好,不过离我们的预期--任务清单系统还是有不少差距,究其原因不过如下: ...

  9. 适合移动端与PC端的 CSS Reset - m_base.css

    文章来源:http://www.cnblogs.com/HCJJ/p/6399185.html 具体代码 @charset "utf-8"; html { -ms-text-siz ...

  10. C#基础第七天-作业答案-利用面向对象的思想去实现名片-动态添加

    class Card { private string name; public string Name { get { return name; } set { name = value; } } ...