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. MATLAB 的函数句柄

    MATLAB 的函数句柄: 1.何为函数句柄? 函数句柄也是MATLAB中的一种常见的数据类型, 它的地位类似于其它计算机语言里的函数对象(Javascript,Python),函数指针(C++),或 ...

  2. sid-msg.map文件概述

    我这边编写了magic对应的指定文件规则,但是运行的时候发现储存的文件中包含我未指定的数据文件: 在rules下边看的时候,发现有sid-msg.map文件,上网了解下这个文件是干啥的.. 下边文章来 ...

  3. 使用 Cobbler 自动化和管理系统安装

    设置一个网络环境可能涉及到许多步骤,才能为开始安装做好准备.您必须: 配置服务,比如 DHCP.TFTP.DNS.HTTP.FTP 和 NFS 在 DHCP 和 TFTP 配置文件中填入各个客户端机器 ...

  4. Zabbix 常见问题处理整理

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. 下载: http://www.zabbix.com/download.php 帮助:https://www ...

  5. mysqlsla快速入门

    小强软件测试,因为不是天生丽质,所以必须天生励志. 性能.python自动化班长期招生,咨询QQ:2083503238 官网:http://xqtesting.sxl.cn QQ群:229390571 ...

  6. ROS学习(七)—— 理解ROS Topic

    一.准备工作 1.打开roscore roscore 2.turtlesim 打开一个turtulesim节点 rosrun turtlesim turtlesim_node 3.turtle key ...

  7. RemoteDesktopManager 简单使用说明

    最近项目需要在多台window系统上,安装应用,没错,是window orz..没有了secureCRT putty等好用的窗体工具,真的挺难受的. 爱折腾的博主,百度了下,发现RemoteDeskt ...

  8. java单双派机制理解

    引言:Java是一个支持双分派的单分派语言 知道java是支持后期动态绑定,也知道访问者模式,但是两者之间的关系,还真不知道,况且在这之间还有一个静态绑定. 1.动态绑定 class Father { ...

  9. 【转】TeXmacs:一个真正“所见即所得”的排版系统

    TeXmacs:一个真正“所见即所得”的排版系统 好久没有推荐过自己喜欢的软件了,现在推荐一款我在美国做数学作业的私家法宝:TeXmacs.我恐怕不可能跟以前那么有闲心写个长篇的 TeXmacs 说明 ...

  10. Android studio 中创建AIDL Service

      1.概述  AIDL在android系统中的作用 AIDL,Android Interface definition language的缩写,它是一种android内部进程通信接口的描写叙述语言, ...