/*----------------------------------------------------------------------------------- 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 |