免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 707 | 回复: 0
打印 上一主题 下一主题

ARM程序规范 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-18 18:44 |只看该作者 |倒序浏览
Andrew Haung <bluedrum@163.com>

最近一段在狂写ARM MINI6410的程序,写多自然要求一些自己和学生一些增加可以性的写法。

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))

2.寄存器对位赋值的写法。
   格式:  寄存器名 =               //寄存器名解释
                   (值 << 位移)   //每位的解释: 对应值的解释
                  | (值 << 位移)  //每位的解释: 对应值的解释

        注意象 (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 

3.寄存器赋连续超过两位来要考虑清零问题.
    
     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) ;

4.一组相关值是定义成enum好还是宏定义好?
     从硬件角度是定义成 宏定义好。
    一般硬件定位一组值不一定连续。如下定义。
      #define  CONST_VAL1  (0x00)
      #define  CONST_VAL2  (0x01)
      #define  CONST_VAL3  (0x02)
      #define  CONST_VAL3  (0x04)
    如果用enum容易笔误成连续值,而且因为不直观,在代码检查时不太容易查出来。
    当然可以手动赋值了,但就失去了enum的优点了。
 
 
ADS常见错误:
  

Error: L6218E: Undefined symbol main (referred from kernel.o)。

  最有可能使用exit。

  Error: L6218E: Undefined symbol Image$$ZI$$Limit (referred from sys_stackheap.o).

则是不能使用其他malloc,realoc,free,fopen,ftell,fseek,fwrite,fsprintf,fclose,swprintf,sprintf,calloc,fscanf,

stderr

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP