Chinaunix首页 | 论坛 | 博客
  • 博客访问: 857217
  • 博文数量: 213
  • 博客积分: 5048
  • 博客等级: 大校
  • 技术积分: 1883
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-14 10:14
文章分类

全部博文(213)

文章存档

2011年(4)

2010年(55)

2009年(47)

2008年(107)

我的朋友

分类: 嵌入式

2009-12-22 22:21:09

我的uCOS都是基于arm来讲的。

今天看at91sam7s里面ucos移植代码,发现一段有趣的代码,反正以前没见到过,很是启发
BSP_InitIntCtrl函数,这个函数是bsp里面初始化中断向量表的一部分,先看代码
#define  BSP_UNDEF_INSTRUCTION_VECTOR_ADDR   (*(INT32U *)0x00000004L)
#define  BSP_SWI_VECTOR_ADDR                 (*(INT32U *)0x00000008L)
#define  BSP_PREFETCH_ABORT_VECTOR_ADDR      (*(INT32U *)0x0000000CL)
#define  BSP_DATA_ABORT_VECTOR_ADDR          (*(INT32U *)0x00000010L)
#define  BSP_IRQ_VECTOR_ADDR                 (*(INT32U *)0x00000018L)
#define  BSP_FIQ_VECTOR_ADDR                 (*(INT32U *)0x0000001CL)

#define  BSP_IRQ_ISR_ADDR                    (*(INT32U *)0x00000038L)
#define  BSP_FIQ_ISR_ADDR                    (*(INT32U *)0x0000003CL)

static void BSP_IntCtrlInit (void)
{
    INT16U i;

    BSP_IRQ_VECTOR_ADDR = 0xE59FF018; /* LDR PC,[PC,#0x18] instruction */
    BSP_IRQ_ISR_ADDR = (INT32U)OS_CPU_IRQ_ISR; /* IRQ exception vector address */

    BSP_FIQ_VECTOR_ADDR = 0xE59FF018; /* LDR PC,[PC,#0x18] instruction */
    BSP_FIQ_ISR_ADDR = (INT32U)OS_CPU_FIQ_ISR; /* FIQ exception vector address */

    BSP_UNDEF_INSTRUCTION_VECTOR_ADDR = 0xEAFFFFFE; /* Jump to itself */
    BSP_SWI_VECTOR_ADDR = 0xEAFFFFFE;
    BSP_PREFETCH_ABORT_VECTOR_ADDR = 0xEAFFFFFE;
    BSP_DATA_ABORT_VECTOR_ADDR = 0xEAFFFFFE;
    BSP_FIQ_VECTOR_ADDR = 0xEAFFFFFE;
                                                                   /* - END CODE RUNNING OUT OF RAM -- */



    AT91C_BASE_AIC->AIC_EOICR = 0x00000000; /* End-of-interrupt command */

    for (i = 0; i < 32; i++) { /* Disable all ISRs */
        AT91C_BASE_AIC->AIC_SVR[i] = (INT32U)BSP_DummyISR_Handler;
        AT91C_BASE_AIC->AIC_SMR[i] = 0;
    }
}


由于arm7是冯诺依曼结构,数据和指令都是共用一个地址空间的,所以我们平时习惯是把地址空间里面的数据当做数据使用,几乎没有把他当做指令来想的。可是上面这段代码里面注意到0xE59FF018类似的奇怪数据了吗,呵呵,他们可是指令哦,想到了这点就全明白了,注释后面也有。

很好的一个技巧,见识了。
阅读(2630) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~