1回答

0收藏

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

FPGA/DSP FPGA/DSP 2855 人阅读 | 1 人回复 | 2008-06-15

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,
                                                ??但愿苍天有眼不辜负菜农的"一腔热血"~~~
                                               
                                               
                                               
                                               
                                               
                                               
                       
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

lingyufeng

发表于 2008-6-18 16:28:02 | 只看该作者

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

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

使用道具 举报

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

本版积分规则

关闭

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