打印

裸奔裸出精彩---菜农成功在DSP5402上将汇编正法,发帖自贺

[复制链接]
2451|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2008-6-15 04:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
长期以来,不知是何人发明,在许多C/C++环境下启动代码都需要汇编语言编写.
这主要是代码地址定位困难的问题.

而启动代码最关键部分就是中断向量表或中断代码表,前者只有中断服务程序的
入口地址,后者要包含跳转指令后加中断服务程序的入口地址两部分.

后者的代表就是MCS51,它间隔8字节地址,一般有跳转命令和简洁代码组成.
前者的代表如ARM7等.

在DSP54XX中,中断的架构类同MCS51.它间隔4字地址,共32个中断空间.

其中复位(中断)入口地址(假定为0x0080)处一般汇编代码为:
        .align  0x0080            ; must be aligned on page boundary

RESET:                          ; reset vector
        BD _c_int00                             ; branch to C entry point
        STM #200,SP                             ; stack size of 200
nmi:    RETE                    ; enable interrupts and return from one
                NOP
                NOP
                NOP                                     ;NMI~

                ; software interrupts
sint17 .space 4*16
..................

我们可以设想:
既然很有规律,间隔又相同,我们为何不用数组或结构去代替汇编代码呢???

虽然DSP/BIOS就不需要汇编启动代码,都由系统自动配置,但实际上也是向其地址
空间添入中断入口地址.

所以答案是肯定可以的,那么如何去实现呢???自己想想~~~

菜农已将其嵌入到新版的c5402cfg.h中,操作极为方便.

例如:
const uVectorEntry g_pfnVectors[] = {
    ISR_Reset(),   //reset      0x0080 #0
    ISR_Default(), //nmi        0x0084 #1
    ISR_Default(), //sint17     0x0088 #2    
    ISR_Default(), //sint18     0x008c #3
    ISR_Default(), //sint19     0x0090 #4
    ISR_Default(), //sint20     0x0094 #5
    ISR_Default(), //sint21     0x0098 #6
    ISR_Default(), //sint22     0x009c #7
    ISR_Default(), //sint23     0x00a0 #8
    ISR_Default(), //sint24     0x00a4 #9
    ISR_Default(), //sint25     0x00a8 #10
    ISR_Default(), //sint26     0x00ac #11
    ISR_Default(), //sint27     0x00b0 #12
    ISR_Default(), //sint28     0x00b4 #13
    ISR_Default(), //sint29     0x00b8 #14
    ISR_Default(), //sint30     0x00bc #15
    ISR(Eint0Isr), //int0       0x00c0 #16
    ISR(Eint1Isr), //int1       0x00c4 #17
    ISR(Eint2Isr), //int2       0x00c8 #18
    ISR(Timer0Isr),//tint       0x00cc #19
    ISR(McBSPIsr), //rint0      0x00d0 #20
    ISR_Default(), //xint0      0x00d4 #21
    ISR_Default(), //rint1      0x00d8 #22
    ISR_Default(), //xint1      0x00dc #23
    ISR(Eint3Isr), //int3       0x00e0 #24
    ISR_Default(), //hpint      0x00e4 #25
    ISR_Default(), //           0x00e8 #26
    ISR_Default(), //           0x00ec #27
    ISR_Default(), //           0x00f0 #28
    ISR_Default(), //           0x00f4 #29
    ISR_Default(), //           0x00f8 #30
    ISR_Default(), //           0x00fc #31
};

哈哈~~~让intvecs.asm见鬼去吧~~~

6.14确实是个好日子~~~俺分别倒塌了:
1.构造了cstring,使ccs能和其他的C++一样对字符串的操作,而且可以随意增添.

2.实现了外部RAM/ROM真正的数组访问,而且比指针少一条指令.

3.成功正法ASM~~~

4.第6感告诉俺HotOS肯定会实现~~而且在代码空间上估计能打败DSP/BIOS,
  但愿苍天有眼不辜负菜农的"一腔热血"~~~



相关帖子

沙发
hotpower|  楼主 | 2008-6-15 04:53 | 只看该作者

哈哈~~~该迷糊了~~~但愿天天好心情~~~

使用特权

评论回复
板凳
hotpower|  楼主 | 2008-6-15 10:42 | 只看该作者

下篇水文:菜农的头文件-很黄很暴力

哈哈~~~

使用特权

评论回复
地板
xwj| | 2008-6-15 10:56 | 只看该作者

这家伙,裸奔上瘾了...

使用特权

评论回复
5
hotpower|  楼主 | 2008-6-15 11:07 | 只看该作者

晕!!!谷歌记录俺网上裸奔近2万次,冤枉俺就脱了几次裤子~~~

使用特权

评论回复
6
hq_y| | 2008-6-15 11:08 | 只看该作者

哈哈~~~~~~~~~精确数字:裸奔19,900次

使用特权

评论回复
7
xwj| | 2008-6-15 11:17 | 只看该作者

你这家伙,脱了裤子就不穿了,天天明目张胆的裸奔,被摄像头

严重损害城市形象,有伤风化,每次罚款十元,共计壹拾玖万玖千元整(¥19900)。


交钱!!!

使用特权

评论回复
8
TPtzj| | 2008-6-16 10:24 | 只看该作者

哈哈~~好大的两个红字

其实我一直想知道菜农为什么喜欢裸奔~~~

使用特权

评论回复
9
hotpower|  楼主 | 2008-6-16 12:48 | 只看该作者

哈哈~~~裸奔后要穿花棉袄~~~对Bios的攻击现在开始~~~

使用特权

评论回复
10
mac001| | 2008-6-16 13:17 | 只看该作者

菜农有没有计划普及一下C呀

C++很多不懂的呀。。。。。

使用特权

评论回复
11
hotpower|  楼主 | 2008-6-16 13:34 | 只看该作者

倒塌了~~~"历史的车轮为何总停留在C时代"???俺半世纪的人都

使用特权

评论回复
12
mac001| | 2008-6-16 14:25 | 只看该作者

呵呵,个人觉得C更简单,而且例程更多呀~~

使用特权

评论回复
13
phoenixmy| | 2008-6-16 14:37 | 只看该作者

呵呵



好菜在后面,估计个中原因很快就见分晓~~~~~~~~~

使用特权

评论回复
14
x512775199| | 2008-6-17 13:15 | 只看该作者

嗯 不错

值得庆贺

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1538

主题

21697

帖子

505

粉丝