回答

收藏

DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)

FPGA/DSP FPGA/DSP 6682 人阅读 | 0 人回复 | 2008-06-14

hotpower 发表于 2008-6-14 03:06 德州仪器(TI) ←返回版面

                        楼主:?DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)

                       
/*-----------------------------------------------------------------------------------
                                                ??????????????????DSP之裸奔框架C++程序源码(菜农C++裸奔大法之二)
                                                本程序主要表现了C++多文件系统的DSP构建方法,任何支持C++的MCU/ARM/DSP都可用
                                                此法构建。
                                                特别要注意变量的重复定义问题:
                                                ??????最好每个C/CPP文件包含与自己同名的H头文件,在其H头文件中再包含一个中间
                                                起桥梁作用的H头文件,我一般喜欢main.h
                                                ????变量或函数要在C/CPP中定义,绝对不要在H头文件中定义!
                                                但一定要在H头文件中用extern加变量或函数声明。
                                                ????C++中要切记全局的类的构造函数肯定要在main()前运行.
                                                ????一般类的成员函数是不能作为中断服务程序ISR()的,但Cortex-M3确是一个意外
                                                总之中断程序要用__interrupt修饰的ISR()的,其类成员函数不能为ISR()
                                                ????最好用一个单独的文件interrupt.cpp来编写所有中断服务程序ISR(),可能其
                                                H头文件什么都没有也最好加上。
                                                ????每个头文件的构成结构基本如下:
                                                #include "main.h"
                                               
                                                #ifndef __DSP5402_INTERRUPT_H
                                                #define __DSP5402_INTERRUPT_H
                                                #ifdef __cplusplus
                                                extern "C"
                                                {
                                                #endif
                                                //在此添加C++代码
                                                extern "C" interrupt void Timer0Isr();
                                                #ifdef __cplusplus
                                                }
                                                #endif
                                                #endif//__DSP5402_INTERRUPT_H
                                                ????
                                                "桥梁"H头文件要包含所有用到的H头文件!!!否则"桥梁"倒塌~~~
                                               
                                                DSP也特别注意cmd文件的配置,因为它和板子的硬件有直接的联系,故其最为重要!!!
                                               
                                                DSP5402的最小配置的裸奔cmd文件:
                                                MEMORY??
                                                {
                                               
                                                ????PAGE 0: /* Program Space */
                                                ????????MMRS????(RW ) : o="000000h" l="000060h" /* Memory-mapped registers??*/
                                                ????????SCRATCH (RW ) : o="000060h" l="000020h" /* scratch-pad DARAM????????*/
                                                ????????VECS????(RWX) : o="000080h" l="000080h" /* Interrupt Vector Table???*/
                                                ????????IPROG???(RWX) : o="000100h" l="001f00h" /* On-Chip DARAM????????????*/
                                                ????PAGE 1: /* Data Space */
                                                ????????IDATA???(RWX) : o="002000h" l="002000h" /* On-Chip DARAM????????????*/
                                                }
                                               
                                                SECTIONS
                                                {
                                                ????.vectors????: > VECS????PAGE 0/* interrupt vector table????????????*/
                                               
                                                ????.text???????: > IPROG???PAGE 0 /* User code?????????????????????????*/
                                                ????.rtdx_text??: > IPROG???PAGE 0 /* RTDX code?????????????????????????*/
                                                ????.cinit??????: > IPROG???PAGE 0 /* initialization tables?????????????*/
                                                ????.pinit??????: > IPROG???PAGE 0 /* initialization functions??????????*/
                                                ????.switch?????: > IPROG???PAGE 0 /* for C-switch tables???????????????*/
                                               
                                                ????/* Normally, data would go to DMEM0, but OVLY="1" so put data in??????*/
                                                ????/* PMEM0 to keep loader from overwriting program with data.?????????*/
                                                ????.sysmem?????: > IDATA???PAGE 1 /*fill = 0DEADh*/ /* dynamic heap????????*/
                                                ????.stack??????: > IDATA???PAGE 1 /*fill = 0BEEFh*/ /* system stack????????*/
                                                ????.const??????: > IDATA???PAGE 1 /* C constant tables?????????????????*/
                                                ????.cio????????: > IDATA???PAGE 1 /* C-IO Buffer???????????????????????*/
                                                ????.bss????????: > IDATA???PAGE 1 /* global & static vars??????????????*/
                                                ????.data???????: > IDATA???PAGE 1 /* asm data area?????????????????????*/
                                                ????.rtdx_data??: > IDATA???PAGE 1 /* RTDX data area????????????????????*/
                                                }
                                                适当地调节IPROG/IDATA即可玩转DSP5402的最小系统~~~
                                                今天特殊节日心情好,本包特别奉送SST39LF400A的驱动flash.h/flash.cpp.
                                                并特别注意C5402CFG.H也更新了~~~如下:
                                                //下列3句是IAR的习惯~~~
                                                #define __disable_interrupt() asm(" ssbx intm");//关中断
                                                #define __enable_interrupt()??asm(" rsbx intm");//开中断
                                                #define __no_operation() asm(" nop");//空操作
                                               
                                                //有点DSP/BIOS的味道~~~
                                                #define SWI_Reset()??asm(" TRAP 0");//DSP软中断复位
                                               
                                                参见包内带的gif文件就知道菜农要玩耍什么了~~~
                                               
                                                菜农HotPower@126.com???2008.6.14 2:28 作于特殊的节日来奉贤给大家~~~
                                                -----------------------------------------------------------------------------------*/
                                               
                                                下图是DSP/BIOS的,不属于裸奔系列,但里面的FLASH操作就是用本包内的
                                               
                                                flash.h/flash.cpp.
                                               
                                               
                                               
                                                点击下载: rtdxflash.rar?
                                               
                       
分享到:
回复

使用道具 举报

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

本版积分规则

关闭

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