RT1502移植LUA成功的总结

RT1502移植LUA成功的总结,第1张

概述1.由于LUA需要至少50K的RAM(经验值),所以stack和heap设置的尽量大,当前分别都设置为了64K。在文件rt1052_flexspi_scf.scf里面改动:  #define Stack_Size                   0x10000    #define Heap_Size                    0x10000 2.LUA解释器代码的__stdout

1.由于LUA需要至少50KRAM(经验值),所以stackheap设置的尽量大,当前分别都设置为了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_openprintffopenfclose等文件 *** 作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断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; 

//重写标准库函数,这时printffopenfclose等文件 *** 作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件 *** 作函数

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成功的总结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1224657.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存