Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1683042
  • 博文数量: 311
  • 博客积分: 7778
  • 博客等级: 少将
  • 技术积分: 4186
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 19:59
个人简介

蓝点工坊(http://www.bluedrum.cn) 创始人,App和嵌入式产品开发。同时也做相应培训和外包工作。 详细介绍 http://pan.baidu.com/s/1y2g88

文章存档

2012年(3)

2011年(115)

2010年(170)

2009年(23)

分类: 嵌入式

2011-01-18 18:44:12

Andrew Haung

最近一段在狂写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

  
阅读(2329) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~