LDR ,R0 =PINSEL0 LDR指令 B指令

65.   问:软件中断是不是必须由SWI指令触发?                                                                

    答:可以直接用你定义成软中断的函数名啊。比如:                                                               

    __SWI(0x12) void myswi(void); //  声明函数 

    __asm // 调用方式1 


    { 


     swi 0x12 


    } 


    myswi(); // 调用方式2 

                 
66.   问:"LDR ,R0  =PINSEL0"中"="是什么意思?这语句是取地址还是取地址中的内容呢?                                    
                                                          
    答:这是 LDR 伪指令,可用来加载32位立即数或地址, LDR , R0=PINSEL0 是将PINSEL0的地址   加载到R0中。 


67.   问:"SWI   0"和"SWI   0X123456"这两条指令中的0和0X123456 中有何用。有没有应用SWI 的具体     例子让我看看?//SWI Software Interupt                                                                        

    答:那是特定的中断入口地址,见ADS_DeveloperGuide_D.pdf 下的swi。 

                 

71.   问:   ADS 里没有  CODE 关键词,怎样使定义的字符串数组不占用RAM 空间?                  
       答:  const unsigned char string []。 

           
72.   问: *(volatile unsigned int * )是什么意思?例如 *(volatile unsigned int *)addr 具体是什么意思?                                      
    答:分开来看,( volatile unsigned int *)就是定义一个可变的无符号整形指针,前面的那个 *   就是取 A其内容。 

73.   问:在异常处理向量表的设置中,为什么不直接将异常向量的入口地址写入PC中呢,为什么非要 用什么DCD这些伪指令,到底有什么用啊?                                                    
    答:为了保证任何时候其累加和为零,不然改一次程序就要计算一次。 


75.   问:我在用ARM 的IAP功能,要把已经烧到Flash中的数据写到RAM中,我是这么写的:                          
         
    uint32 *q, data; 


    q = 0x00006000; 


    data = *q;                                                               


    这是要读的Flash的起始地址,但是第二句编译出错,我想应该是C编译器不许给指针直接赋值, 


    我用汇编解决了这个简单的问题,但是怎么用C来解决呢?                                               


      答: q = (uint32 *)0x00006000  。 


 85.  问:存储异常向量表中程序跳转使用LDR指令,而不使用B指令的原因是什么?   
答:LDR指令可以全地址范围跳转,而B指令只能在前后32MB范围内跳转;芯片具有Remap功能时,当向量表位于内部RAM或外部存储器中,用B指令不能跳转到正确的位置。 

你可能感兴趣的:(汇编,嵌入式)