ARM程序规范

简介:

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


本文转自lilin9105 51CTO博客,原文链接:http://blog.51cto.com/7071976/1288041,如需转载请自行联系原作者
相关文章
|
Linux 编译器 Windows
6818开发板(arm平台)利用SecureCRT连接主机并运行程序(99乘法表)
6818开发板(arm平台)利用SecureCRT连接主机并运行程序(99乘法表)
348 0
|
芯片 内存技术
基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
基于ARM Cortex-M0+内核的bootloader程序升级原理及代码解析
|
C语言
Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 下
上一篇中,介绍了如何编译、运行arm-linux-gdb 和 gdbserver,这一篇中介绍怎样结合Eclipse-cdt进行图形化编译调试 首先当然是使用CDT创建项目并添加源文件。 在左侧 Project Explorer 的项目名上点右键->Properties 进入项目属性设置 选...
1345 0
|
NoSQL Linux 程序员
Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试 上
做嵌入式Linux开发也不用再羡慕windows程序员VS集成开发环境的强大,我们同样能够搭建出给力的IDE。 今天在这里记录一下我使用Eclipse-cdt,gdb,gdbserver搭建远程arm调试的过程。
1381 0
|
C语言
C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) .
<p><span style="font-size:18px">我们在C语言编程中会遇到一些参数个数可变的函数,一般人对它的实现不理解。例如Printf():</span></p> <p align="center"><span style="font-size:18px">  Printf()函数是C语言中非常常用的一个典型的变参数函数,它</span></p> <p align="
1492 0
|
Linux
gm8180:arm linux启动加载模块、运行程序
<div class="bct fc05 fc11 nbw-blog ztag"> <p><strong><font color="#ff0000">1. init</font></strong></p> <p>#!/bin/busybox ash<br>#load modules mao 2013-02-16 14:12:48 <br>echo "********************
1673 0
ARM启动程序需要完成的工作
 一、软件初始化 1、初始化堆栈指针SP 2、设置返回地址 3、调用main函数 4、清理工作 二、硬件初始化 1、关闭看门狗(防止处理器不断重启) 2、初始化时钟 3、初始化SDRAM
786 0
|
4天前
|
数据处理 编译器 数据库
x64 和 arm64 处理器架构的区别
x64 和 arm64 处理器架构的区别
118 0
【各种问题处理】X86架构和ARM架构的区别
【1月更文挑战第13天】【各种问题处理】X86架构和ARM架构的区别