因为之前的版本不是我移植的,而且目前我们也没有其他平台可以对照,所以问题在哪里我还不太清楚。
以下是我测试用的 application.c
/*
* File : app.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
*
*
* Change Logs:
* Date Author Notes
* 2006-06-05 Bernard the first version
*/
/**
* @addtogroup sam7s
*/
/*@{*/
#include
#include "types.h"
#define DELAY_TEST(x) delay(x)
//#define DELAY_TEST(x) rt_thread_delay(x)
unsigned char buffer1[0x00000400];
unsigned char stthread_stack1[65536];
unsigned char buffer2[0x00000400];
unsigned char stthread_stack2[65536];
static struct rt_thread sttest1;
static struct rt_thread sttest2;
static void delay(u32 count)
{
u32 i,j;
// return;
for(i=0;i {
for(j=0;j<100;j++);
}
return;
}
void dummy128(void)
{
u8 temp[2048];
u8 i;
for(i=0;i {
temp
= i;
}
return;
}
void sttest_thread1(void* para)
{
u32 i;
rt_kprintf("Enter %s.
",__FUNCTION__);
while(1)
{
DELAY_TEST(750);
rt_kprintf("In %s.
",__FUNCTION__);
// dummy128();
for(i=0;i {
if(i%32 == 0)
{
rt_kprintf("
");
}
rt_kprintf("%02x ", buffer1
);
}
// for(i=0;i // {
// if(i%32 == 0)
// {
// rt_kprintf("
");
// }
// rt_kprintf("%02x ", stthread_stack1
);
// }
}
return;
}
void sttest_thread2(void* para)
{
int i;
rt_kprintf("Enter %s.
",__FUNCTION__);
while(1)
{
DELAY_TEST(1000);
rt_kprintf("In %s.
",__FUNCTION__);
}
return;
}
int rt_application_init()
{
memset(buffer1, 0xff,sizeof(buffer1));
memset(buffer2, 0xff,sizeof(buffer2));
// rt_kprintf("buffer = 0x%08x, sizeof(buffer)=0x%08x
",buffer,sizeof(buffer));
rt_kprintf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
");
rt_kprintf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
");
// rt_kprintf("Stack of thread=0x%08x.
",thread_stack);
// rt_kprintf("myvalue1=%d, myvalue2=%d.
",myvalue1, myvalue2);
#if 1
rt_thread_init(&sttest1,
"sttest1",
sttest_thread1, RT_NULL,
&stthread_stack1[0], sizeof(stthread_stack1),
20, 32);
/* startup */
rt_thread_startup(&sttest1);
#endif
#if 1
rt_thread_init(&sttest2,
"sttest2",
sttest_thread2, RT_NULL,
&stthread_stack2[0], sizeof(stthread_stack2),
20, 32);
/* startup */
rt_thread_startup(&sttest2);
#endif
return 0;
}
代码中,buffer1和buffer2被初始化为0xff,在我们的平台上运行时,可以发现 buffer1 的后 192 字节内容被修改了,buffer2没有看,不过应该也是一样问题。
而且在sttest_thread1中如果调用了 dummy128,则线程1就会死掉,但是如果dummy128不使用那么多局部变量的话就不会死。
因为之前的版本不是我移植的,而且目前我们也没有其他平台可以对照,所以问题在哪里我还不太清楚。
以下是我测试用的 application.c
/*
* File : app.c
* This file is part of RT-Thread RTOS
* COPYRIGHT (C) 2006, RT-Thread Development Team
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
*
*
* Change Logs:
* Date Author Notes
* 2006-06-05 Bernard the first version
*/
/**
* @addtogroup sam7s
*/
/*@{*/
#include
#include "types.h"
#define DELAY_TEST(x) delay(x)
//#define DELAY_TEST(x) rt_thread_delay(x)
unsigned char buffer1[0x00000400];
unsigned char stthread_stack1[65536];
unsigned char buffer2[0x00000400];
unsigned char stthread_stack2[65536];
static struct rt_thread sttest1;
static struct rt_thread sttest2;
static void delay(u32 count)
{
u32 i,j;
// return;
for(i=0;i {
for(j=0;j<100;j++);
}
return;
}
void dummy128(void)
{
u8 temp[2048];
u8 i;
for(i=0;i {
temp
= i;
}
return;
}
void sttest_thread1(void* para)
{
u32 i;
rt_kprintf("Enter %s.
",__FUNCTION__);
while(1)
{
DELAY_TEST(750);
rt_kprintf("In %s.
",__FUNCTION__);
// dummy128();
for(i=0;i {
if(i%32 == 0)
{
rt_kprintf("
");
}
rt_kprintf("%02x ", buffer1
);
}
// for(i=0;i // {
// if(i%32 == 0)
// {
// rt_kprintf("
");
// }
// rt_kprintf("%02x ", stthread_stack1
);
// }
}
return;
}
void sttest_thread2(void* para)
{
int i;
rt_kprintf("Enter %s.
",__FUNCTION__);
while(1)
{
DELAY_TEST(1000);
rt_kprintf("In %s.
",__FUNCTION__);
}
return;
}
int rt_application_init()
{
memset(buffer1, 0xff,sizeof(buffer1));
memset(buffer2, 0xff,sizeof(buffer2));
// rt_kprintf("buffer = 0x%08x, sizeof(buffer)=0x%08x
",buffer,sizeof(buffer));
rt_kprintf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
");
rt_kprintf("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
");
// rt_kprintf("Stack of thread=0x%08x.
",thread_stack);
// rt_kprintf("myvalue1=%d, myvalue2=%d.
",myvalue1, myvalue2);
#if 1
rt_thread_init(&sttest1,
"sttest1",
sttest_thread1, RT_NULL,
&stthread_stack1[0], sizeof(stthread_stack1),
20, 32);
/* startup */
rt_thread_startup(&sttest1);
#endif
#if 1
rt_thread_init(&sttest2,
"sttest2",
sttest_thread2, RT_NULL,
&stthread_stack2[0], sizeof(stthread_stack2),
20, 32);
/* startup */
rt_thread_startup(&sttest2);
#endif
return 0;
}
代码中,buffer1和buffer2被初始化为0xff,在我们的平台上运行时,可以发现 buffer1 的后 192 字节内容被修改了,buffer2没有看,不过应该也是一样问题。
而且在sttest_thread1中如果调用了 dummy128,则线程1就会死掉,但是如果dummy128不使用那么多局部变量的话就不会死。
举报