1.由于LUA需要至少50K的RAM(经验值),所以stack和heap设置的尽量大,当前分别都设置为了64K。在文件rt1052_flexspi_scf.scf里面改动:
#define Stack_Size 0x10000
#define Heap_Size 0x10000
2.LUA解释器代码的__stdout和本体程序的__stdout重复定义,如下:
“..\OBJ\test.axf: Error: L6200E: Symbol __stdout multiply defined (by stdio_streams.o and lpuart.o).”
解决过程:
2.1单纯的把多处定义的__stdout前面加extern,会报如下错误:
“..\OBJ\test.axf: Error: L6915E: library reports error: __use_no_semihosting was requested,but _sys_open was referenced
”
嵌入式程序编译时如果出现sys_open,printf、fopen、fclose等文件 *** 作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,程序一直死在这里不能运行。这时就需要__use_no_semihosting这 个声明,使程序遇到这些文件 *** 作函数时不停在此中断处,具体 *** 作如下,将下列程序加入你的工程中:
#if 1
#pragma import(__use_no_semihosting)//_swi
#pragma import(_main_redirection)
const char __stdin_name[150];
const char __stdout_name[150];
const char __stderr_name[150];
typedef int fileHANDLE;
typedef unsigned int clock_t; /* cpu time type */
typedef unsigned int time_t; /* date/time in unix secs past 1-Jan-70 */
extern file __stdout;
//重写标准库函数,这时printf、fopen、fclose等文件 *** 作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件 *** 作函数
voID _sys_exit(int status)
{
while(1);
}
fileHANDLE _sys_open(const char *name,int openmode)
{
return 0;
}
int _sys_close(fileHANDLE fh)
{
return 0;
}
int _sys_write(fileHANDLE fh,const unsigned char *buf,unsigned len,int mode)
{
return 0;
}
int _sys_read(fileHANDLE fh,unsigned char*buf,int mode)
{
return 0;
}
int _sys_istty(fileHANDLE fh)
{
return 0;
}
int _sys_seek(fileHANDLE fh,long pos)
{
return 0;
}
int _sys_ensure(fileHANDLE fh)
{
return 0;
}
long _sys_flen(fileHANDLE fh)
{
return 0;
}
int _sys_tmpnam(char *name,int fileno,unsigned maxlength)
{
return 0;
}
voID _ttywrch(int ch)
{
}
time_t time(time_t *t)
{
return 0;
}
int remove(const char *filename)
{
return 0;
}
int rename(const char *oldname,const char *newname)
{
return 0;
}
int system(const char *command)
{
return 0;
}
char *_sys_command_string(char *cmd,int len)
{
return 0;
}
clock_t clock(voID)
{
return 0;
}
//重定义fputc函数
int fputc(int ch,file *f)
{
while((LPUART1->STAT&LPUART_STAT_TDRE_MASK)==0);
LPUART1->DATA=(u8)ch;
return ch;
}
#endif
---------------------------------------------------------END----------------------------------------------------------------------------
总结以上是内存溢出为你收集整理的RT1502移植LUA成功的总结全部内容,希望文章能够帮你解决RT1502移植LUA成功的总结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)