TI中文支持网
TI专业的中文技术问题搜集分享网站

求助啊,C6748 ,main函数调用子文件时,出现一个很奇怪的问题

我使用的是带SYS/BIOS的工程,含有两个TASK,现在出现一个很奇怪的问题

1、我在main.c中,调用一个计算旋转因子的函数void gen_twiddle_fft_sp (float *w, int n)(供给以后的FFT使用),这个函数的定义我放在了calculate.c的子文件          中,而且debug时,可以看到这个函数可以运行通过,但是之后,程序却无法进入两个task之中。

2、去掉这个函数之后,一切正常,可以进入两个TASK,甚至当函数内容为空时(内容注释掉),也可以进入接下来的两个TASK

3、当这个函数的定义直接放在main.c时(不放在calculate.c中),即使这个函数的定义有内容,程序也能进入两个TASK。

4、我检查了这个函数的声明,确实是extern型,甚至它的实参,我也设置成了extern型,但是只要它被定义到calculate.c的子文件中,同时它的内容不为空时,程       序就无法进入接下来的TASK,当函数内容为空时,又能进入两个TASK了

请问,这个是怎么回事啊?

main.c中也包含了fft_calculate.h文件,同时也定义了变量w_sp,和WN,这里没有列出,总之,语法应该没有问题。不知道问题究竟出在哪里?

Tony Tang:

你的函数gen_twiddle_fft_sp (float *w, int n)把程序搞挂了呗,栈设的不够大吧。不要把问题想复杂了,没有什么trick的事情。

baokun hu:

回复 Tony Tang:

这里有好几个栈,

这里是我的关于几个堆栈的设置

/* System stack size (used by ISRs and Swis) */Program.stack = 0x200000;

task0Params.stackSize = 204800;

task1Params.stackSize = 204800;

之前发生过栈溢出的问题,现在上面这几个栈我感觉设置的已经不小了,难道 还有那个栈我没有设置么?

Tony Tang:

回复 baokun hu:

你就在BIOS_start处打断点,然后看前面函数运行后对W数组的访问有没有越界。

这里还没进任务,跟任务stack无关。

baokun hu:

回复 Tony Tang:

不好意思,不太理解越界是啥意思,对W数组的访问有没有越界?没弄明白。。

Tony Tang:

回复 baokun hu:

你这个函数里不就是对*W进行运算操作的么。意思是说假如W长度是100,你运算之中里有没有访问到100外头去了。

 gen_twiddle_fft_sp (float *w, int n)

很简单,你把这个函数换成别的函数看有没有问题,就知道是不是这个函数有问题了。

baokun hu:

回复 Tony Tang:

Tony Tang

你这个函数里不就是对*W进行运算操作的么。意思是说假如W长度是100,你运算之中里有没有访问到100外头去了。

 gen_twiddle_fft_sp (float *w, int n)

很简单,你把这个函数换成别的函数看有没有问题,就知道是不是这个函数有问题了。

Tony Tang:

回复 baokun hu:

你理解的都对。全局变量在.bss或.far段跟stack没关系。

你的程序是跑在DDR上还是片上内存?是不是内存不稳定。都放到片上内存能跑不。

baokun hu:

回复 Tony Tang:

Tony Tang

你理解的都对。全局变量在.bss或.far段跟stack没关系。

你的程序是跑在DDR上还是片上内存?是不是内存不稳定。都放到片上内存能跑不。

Tony Tang:

回复 baokun hu:

baokun hu现在我怀疑是不是全局变量设的太多了,估计都有几十K了,我想问下,这个全局变量最多能搞多少个?

不用当心这个,bss段最大为32KB,不是所有全局变量都放在BSS的,数组之类的是放在.far段的,而且超出范围编译器会报错的。

baokun hu:

回复 Tony Tang:

Tony Tang

baokun hu现在我怀疑是不是全局变量设的太多了,估计都有几十K了,我想问下,这个全局变量最多能搞多少个?

不用当心这个,bss段最大为32KB,不是所有全局变量都放在BSS的,数组之类的是放在.far段的,而且超出范围编译器会报错的。

赞(0)
未经允许不得转载:TI中文支持网 » 求助啊,C6748 ,main函数调用子文件时,出现一个很奇怪的问题
分享到: 更多 (0)