EDN博客精华文章 作者:
hotpower
/*-----------------------------------------------------------------------------------
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