首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]codewarrior程序出错limitation:code size>1024

[求助]codewarrior程序出错limitation:code size>1024

我用的是HC908GP32,CW_V3.0版本,程序内容是用GP32控制DDS芯片,用C语言写,开头部分是照北航出的参考书上写的。主程序部分自己写,用TURBO C调试过没问题。用CW make时提示limitation:code size>1024。请高手帮忙。


//系统包含的头文件
#include
#include
#include

//中断函数和子函数声明部分
void _ADC_Interrupt(void); //ADC中断子程序
void _KBD_Interrupt(void); //键盘中断子程序
void _TOF_Interrupt(void); //定时器溢出中断子程序
void _TCH1_Interrupt(void);//定时器通道1中断子程序
void _TCH0_Interrupt(void);//定时器通道0中断子程序
void _IRQ_Interrupt(void); //外部中断中断子程序
void _Startup(void); //复位中断子程序
//用户子程序定义
void sys_init(void); //系统初始化子程序
void dds_init(void); //串行数据输出子程序
void set_code(void);


//宏定义
#define CONFIG1_VAL 0x3D //用户配置config1寄存器的值
#define CONFIG1_ADR 0xFDEA //CONFIG1_VAL存放的地址
#define JMP_TAB_ADR 0xFDEB //用户中断向量起始地址
#define JMP_Code 0xCC //跳转指令直接寻址方式的指令码

typedef void (*tIntFunc)(void); //声明一个指向函数的数据类型
typedef struct jumpEntry { //声明一个结构体jumpEntry类型
unsigned char jmpIstr;
tIntFunc intFunc; //定义一个tIntFunc类型的变量
} JumpEntry;
//CONFIG1_VAL存放到CONFIG1_ADR定义的地址中
const unsigned char CONFIGX @CONFIG1_ADR = CONFIG1_VAL;
//定义各中断向量的中断入口
const JumpEntry IntJmpTable[] @JMP_TAB_ADR = { //定义数组IntJmpTable,元素为JumpEntry类型
JMP_Code, _ADC_Interrupt, //AD转换中断矢量地址FDEB
JMP_Code, _KBD_Interrupt, //键盘唤醒中断矢量地址FDEE
JMP_Code, _TOF_Interrupt, //定时计数器溢出中断矢量地址FDF1
JMP_Code, _TCH1_Interrupt, //定时器通道1溢出中断矢量地址FDF4
JMP_Code, _TCH0_Interrupt, //定时器通道0溢出中断矢量地址: $FDF7
JMP_Code, _IRQ_Interrupt, //IRQ矢量地址: $FDFA
JMP_Code, _Startup //复位矢量地址FDFD
};

unsigned int key_data[9]={9,8,7,11,6,5,4,10,15};
unsigned int code[40]={0};

//主程序开始
void main(void)
{
sys_init();
dds_init();
set_code();
}

/***********************************************************************/
/* 文件名: sys_init(void) */
/* 程序描述:包括config寄存器的设置、端口寄存器的设置 */
/***********************************************************************/
void sys_init(void)
{
//----初始化CONFIG控制字----------------------------------------------------------
CONFIG1=0x01; //禁止看门狗
CONFIG2=0x01; //内部总线时钟用作SCI时钟
//----初始化锁相环--------------------------------------------------------------------
PCTL=0x00; //禁止上PLL
PBWC=0x80; //自动控制方式
PMSH=0x03; //反馈分频器因子高位N=03H
PMSL=0xD1; //反馈分频器因子低位N=D1H
PMRS=0xD0; //因子L=80H
PMDS=0x01; //因子R=01H
PCTL=0x22; //P=0,E=2,启动PLL,启动压控振荡器时钟
PBWC_AUTO=1; //设置自动带宽控制模式
while(PBWC_LOCK) //等待PLL稳定
PCTL_BCS=1; //启动压控振荡器时钟为时钟源
//----I/O口初始化--------------------------------------------------------------------
DDRA=0x0F; //PTA0-PTA3输入,PTA4-PTA7输出
PTAPUE=0xF0; //PTA0-PTA3设置上拉电阻
PTA=0xF0; //PTA4-PTA7置1
DDRB=0xFF; //设置B口为输出
DDRC=0xFF; //设置C口为输出
EnableInterrupts; //开中断
}

/************************************************************************/
/*文件名:dds_init(void); */
/*程序描述:初始化DDS,PTC0=D7,PTC1=W_CLK,PTC2=FQ_UD,PTC3=RESET */
/************************************************************************/
void dds_init(void)
{
DDRC=0xFF; //设置C口为输出
PTC=0x00; //设置DDS各端口初始值
PTC=0x10; //RESET置1,有效
PTC=0x00; //RESET复位
}


/************************************************************************/
/*文件名:void set_code(void)           */
/*程序描述:设置控制字    */
/************************************************************************/
void set_code(void)
{
unsigned char a,i,j,k,m,n;
float b,pre_data=0.00004;
long final_data;
for(i=0;i<9;i++)
if(key_data==15)
{
n=i;
break;
}
for(i=0;i if(key_data==11)
{
m=i;
break;
}
if(i==n)
m=n;
if(m!=n)
{
key_data[m]=0;
if(key_data[n-1]==10||key_data[n-1]==13||key_data[n-1]==16)
{
for(j=0;j {
b=pow(10,m-j-1);
pre_data+=key_data[j]*b;
}
for(k=1;m+k {
b=pow(10,0-k);
pre_data+=key_data[m+k]*b;
b=pow(10,key_data[n-1]-10);
pre_data*=b;
}
}
else
{
for(j=0;j {
b=pow(10,m-j-1);
pre_data+=key_data[j]*b;
}
for(k=1;m+k {
b=pow(10,0-k);
pre_data=pre_data+key_data[m+k]*b;
}
}
}
else
{
if(key_data[n-1]==10||key_data[n-1]==13||key_data[n-1]==16)
{
for(j=0;j {
b=pow(10,n-1-j);
pre_data+=key_data[j]*b;}
b=pow(10,key_data[n-1]-10);
pre_data*=b;}
else
{
for(j=0;j {
b=pow(10,n-1-j);
pre_data+=key_data[j]*b;
}
}
}
final_data=pre_data;
for(a=0;a<32;a++)
{
code[a]=5;
}
code[32]=1;
code[33]=0;
code[34]=1;
}



你的CodeWarrior没有license或已过期。建议你下载新的CodeWarrior特别版(6.0或6.1)。在飞思卡尔中文网站上下载速度更快。
海纳百川  有容乃大
返回列表