智能车制作
标题:
调试的时候Illegal BP是怎么回事?
[打印本页]
作者:
librae8226
时间:
2009-12-1 13:58
标题:
调试的时候Illegal BP是怎么回事?
我调了一个定义在另一个文件里的函数就出现这个问题了,
大家有遇到过吗?怎么解决的啊?
作者:
chenrunshe_007
时间:
2009-12-7 13:45
回复
1#
librae8226
不知所云,楼主最好讲的详细一点,有代码最好
作者:
librae8226
时间:
2009-12-7 18:36
回复
2#
chenrunshe_007
这是main.c代码(for(;;)里主要实现发送图像功能):
#include "includes.h"
#pragma CODE_SEG DEFAULT
void main(void)
{
/* put your own code here */
int i, j;
DisableInterrupts;
SetBusCLK_48M();
TimerInit();
Port_Init();
PWM_Init();
SCI_Init();
EnableInterrupts;
for(;;)
{
//Send Image
if( flag == 1 )
{
DisableInterrupts;
TFLG1 = 0x00;
flag = 0;
ImageBinarize();
for( i = 0; i < ROW_VALUE; i++ )
{
PORTA_PA7 = !PORTA_PA7;
for( j = 0; j < COLUMN_VALUE; j++ )
{
if( buff_b[i][j] == 1 )
uart_putchar('1');
else
uart_putchar('0');
}
uart_putchar('\n');
}
uart_putchar('\n');
}
PORTA_PA1 = !PORTA_PA1;
TFLG1 = 0x0F;
EnableInterrupts;
//Send Complete
}
/* loop forever */
/* please make sure that you never leave main */
}
复制代码
这是ImageProcess.c中的发送图像代码:
#include "includes.h"
// Illegal BP while debugging??
void SendImage(void)
{
int i,j;
int servflag = 3;
if( flag )
{
DisableInterrupts;
TFLG1 = 0x00;
flag = 0;
BinarizeImage();
for( i = 0; i < ROW_VALUE; i++ )
{
PORTA_PA7 = !PORTA_PA7;
for( j = 0; j < COLUMN_VALUE; j++ )
{
if( buff_b[i][j] == 1 )
uart_putchar('1');
else
uart_putchar('0');
}
uart_putchar(0x0a);
uart_putchar(0x0d);
}
}
TFLG1 = 0x0F;
EnableInterrupts;
}
复制代码
如图:
全速执行后停止了:
[attach]815[/attach]
调试里的command窗口
[attach]816[/attach]
command里的消息
[attach]817[/attach]
问题在void SendImage(void)这个函数上,也就是说,如果我把函数内容写到main.c的for(;;)里,就可以实现发送图像,但是如果我把函数单独写到ImageProcess.c这个文件里,再在主函数里调,在调试的时候全速执行就会自己停止,同时出现Illegal BP这个提示。
是哪里出了问题?谢谢~
作者:
librae8226
时间:
2009-12-7 18:39
对了,再补充一点,我在其他文件里同样写了别的函数,像模块初始化这些,调用的时候都没问题,可是一调用这个SendImage()就出问题……
作者:
chenrunshe_007
时间:
2009-12-8 13:56
回复
4#
librae8226
大哥,你没有把void SendImage(void)这个函数的头文件装载到Main.c中不出错才怪
两个方法:
1.把你的ImageProcess.c改为ImageProcess.h,然后在Main.c开始那里加上 #include "ImageProcess.h",要注意的是ImageProcess.h文件一定要和Main.c保存在同一个文件夹(貌似在工程的窗口那里有include文件夹,你把ImageProcess.h拉进去就行了,没有就算了,我也记得不是很清楚)。
2.如果你不想把ImageProcess.c改成ImageProcess.h也行,但是要新建一个ImageProcess.h,并在里面写好跟ImgaeProcess.c对应的接口函数(faint!久不看我也忘记接口函数怎么写了,你可以参考一下论坛里的龙丘的例程或者whut_wj的三种测速的程序,我记得上面写有),然后也是同样在在Main.c开始那里加上 #include "ImageProcess.h"。
我之前遇到的情况就是这样解决的,不知道放在你那里得不得,你试试,不得再说
作者:
whut_wj
时间:
2009-12-8 19:08
改为内联函数。
作者:
librae8226
时间:
2009-12-8 19:30
噢,谢谢,我再研究研究~
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2