查看: 2489|回复: 1

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

[复制链接]

该用户从未签到

发表于 2008-6-15 05:23:25 | 显示全部楼层 |阅读模式
分享到:
hotpower 发表于 2008-6-15 04:44 德州仪器(TI) ←返回版面

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

                       
长期以来,不知是何人发明,在许多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,
                                                  但愿苍天有眼不辜负菜农的"一腔热血"~~~
                                               
                                               
                                               
                                               
                                               
                                               
                       
回复

使用道具 举报

该用户从未签到

发表于 2008-6-18 16:28:02 | 显示全部楼层

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

好像这是我们常用的做法阿
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-12-4 17:26 , Processed in 0.131988 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.