我正在从事一个涉及由ARM处理器支持的嵌入式设备的项目。 我正在用GCC和RVCT5
编译以下代码使用GCC,我没有编译器警告,程序运行没有问题。
使用RVCT5时,我也没有编译器警告,但程序会在循环中崩溃
我隔离了崩溃,但对解决方法一无所知。
RVCT5似乎无法解析我需要作为参数传递给函数的回调函数的地址。
main.c
#include "net_test.h"
void main( int argc, char **argv )
{
printf("TASK1 %p \r\n",&msgTask1); //this is ok
//printf("TASK2 %p \r\n",&msgTask2); //this crashes
}
net.c
#include "net_test.h"
INT32 msgTask1(INT32 type, INT32 param1, INT32 param2)
{
//omissis
}
parser.c
#include "net_test.h"
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2)
{
//omissis
}
net_test.h
INT32 msgTask1(INT32 type, INT32 param1, INT32 param2);
INT32 msgTask2(INT32 type, INT32 param1, INT32 param2);
如果在我的代码中取消注释打印msgTask2地址的行,则该软件甚至无法运行主程序。可以证明这一点,因为我看不到msgTask1的行,并且使用硬件ARM调试器,应用程序进行了矢量捕获,但指令指针未引用主线程。
从我的角度来看,在初始化函数时存在一些错误。 我读了一些有关静态初始化顺序惨败的信息,但我不知道是否是这种情况。我在声明两个源文件中包含的标头中的函数。
我认为这可能是与内存占用有关的问题,因此我尝试增加应用程序可用的堆栈大小。我还尝试注释掉部分代码以达到稳定的状态,但是没有任何效果。
关于我可以调查的任何线索吗?