如何将coremark程序移植到stm32 lwip移植上

野火stm32-详解如何用STM32官方库来开发自己的程序_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
野火stm32-详解如何用STM32官方库来开发自己的程序
上传于||文档简介
&&s​t​m2​,​该​文​档​从​S​T​M2​库​最​底​层​的​库​文​件​开​始​分​析​,​讲​解​库​源​码​的​目​录​结​构​,​再​分​析​库​的​实​现​,​再​到​如​何​用​库​来​开​发​自​己​的​应​用​程​序​。​只​有​熟​悉​了​S​T​的​库​,​才​能​够​对​里​面​的​A​P​I​运​用​自​如​,​才​能​够​快​速​地​进​行​项​目​开​发​。
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩10页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢STM32的keil移植到IAR的问题。_百度知道UCOSII移植到STM32_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
UCOSII移植到STM32
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 33375|回复: 56
在STM32上移植裸机ucGUI(超详细)
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
更多更精彩内容见晓梦逸尘的博客:
&&首先感谢WZT大哥共享的ucGUI移植的文档,先将本人的移植过程详细记录下来,以供初学者参考:
1、打开调试好的TFTLCD测试程序(这里是打开“ALIENTEK MINISTM32 实验10 TFTLCD显示实验”)的工程文件夹,在其中创建ucGUI的文件夹。由于ucGUI/CORE文件中已经存在了lcd.h和lcd.c的文件,所以我们将工程目录HARDWARE/LCD中的lcd.c文件和lcd.h文件的文件名换成ili93xx.c和ili93xx.h,并将其中的预处理命令也相应的更换。然后将ili93xx.h和ili93xx.c中用来标识液晶屏宽和高的LCD_H与LCD_W分别换成LCD_HEIGHT和LCD_WIDTH。
2、打开ucGUI源码文件,将其Start/GUI目录下的除JPEG文件夹以外的文件夹复制到第一步中创建的ucGUI文件夹中。
3、将Start/Config和Sample/GUI_X也复制到之前的文件夹 ucGUI中。
4、打开工程文件,添加工程文件夹如下图:
a2d5faec0b00a32c64f699_130.jpg (0 Bytes, 下载次数: 0)
22:54 上传
其中,USER、HARDWARE、SYSTEM、CORE、FWLib是工程中原有的文件,除此之外为需要新建的文件。 由于ucGUI目录下的CORE文件名与原有的文件名相冲突,故将其修改为ucCORE。并将ucGUI目录下的除GUI_X、Config以外的所有文件添加到相应的文件夹下。然后再添加Config目录下对应的三个.h文件和GUI_X目录下的GUI_X.c文件。
5、打开Config/GUIConf.h将其修改如下:
#ifndef GUICONF_H
#define GUICONF_H
#define GUI_OS (0) /* Compile with multitasking support */
#define GUI_SUPPORT_TOUCH (0) /* Support a touch screen (req. win-manager) */
#define GUI_SUPPORT_UNICODE (0) /* Support mixed ASCII/UNICODE strings */
#define GUI_DEFAULT_FONT &GUI_Font6x8
//#define GUI_ALLOC_SIZE 12500 /* Size of dynamic memory ... For WM and memory devices*/
#define GUI_ALLOC_SIZE 5000 /* Size of dynamic memory ... For WM and memory devices*/
/*********************************************************************
* Configuration of available packages
#define GUI_WINSUPPORT 0 /* Window manager package available */
#define GUI_SUPPORT_MEMDEV 0 /* Memory devices available */
#define GUI_SUPPORT_AA 0 /* Anti aliasing available */
#endif /* Avoid multiple inclusion */
6、打开Config/LCDConf.h将其修改为如下:
#ifndef LCDCONF_H
#define LCDCONF_H
/*********************************************************************
* General configuration of LCD
**********************************************************************
#define LCD_XSIZE (240) /* 320 -& 400 */
#define LCD_YSIZE (320) /* 240 */
#define LCD_CONTROLLER (-1) /* 9320 -& 5420 */
#define LCD_BITSPERPIXEL (16)
#define LCD_FIXEDPALETTE (565)
#define LCD_SWAP_RB (1) //红蓝反色交换
//#define LCD_SWAP_XY (1)
//LCD_MIRROR_X
#define LCD_INIT_CONTROLLER() LCD_hard_Init();
#endif /* LCDCONF_H */
7、打开ili93xx.c和ili93xx.h文件,将其中的void LCD_Init(void)函数更名为void LCD_hard_Init(void)以防与ucGUI中的原有函数名冲突。然后再在ili93xx.c中添加如下函数,并在ili93xx.h中将其声明。
void ili9320_SetPoint(u16 x,u16 y,u16 color)
POINT_COLOR=
LCD_DrawPoint(x,y);
8、打开LCDDummy.c文件,添加头文件包含#include "ili93xx.h";将预处理命令修改为#if (LCD_CONTROLLER == -1) 。
9、在void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex)函数最后添加语句ili9320_SetPoint( xPhys, yPhys ,PixelIndex);
10、在unsigned int LCD_L0_GetPixelIndex(int x, int y)函return语句之前添加PixelIndex = LCD_ReadPoint(x,y);
11、移植ColorBar程序,将main.c文件修改为如下形式(别忘了在main.c文件中添加#include “gui.h”的预处理命令):
void DemoShowColorBar(void);
int main(void)
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
LED_Init();
KEY_Init();
// LCD_Init();
GUI_Init();
GUI_SetBkColor(GUI_BLACK);
GUI_SetColor(GUI_WHITE);
GUI_Clear();
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("COLOR_ShowColorBar - Sample", 160, 5);
DemoShowColorBar();
delay_ms(400);
LED0 = !LED0;
void DemoShowColorBar(void)
int x0 = 60, y0 = 40, yStep = 15,
int xsize = LCD_GetDevCap(LCD_DEVCAP_XSIZE) - x0;
GUI_SetFont(&GUI_Font8x16);
#if (LCD_FIXEDPALETTE)
yStep = 13;
GUI_DispStringAt("Fixed palette: ", 0, 40);
GUI_DispDecMin(LCD_FIXEDPALETTE);
GUI_DispStringAt("Red", 0, y0 + yStep);
GUI_DispStringAt("Green", 0, y0 + 3 * yStep);
GUI_DispStringAt("Blue", 0, y0 + 5 * yStep);
GUI_DispStringAt("Grey", 0, y0 + 6 * yStep);
GUI_DispStringAt("Yellow", 0, y0 + 8 * yStep);
GUI_DispStringAt("Cyan", 0, y0 + 10 * yStep);
GUI_DispStringAt("Magenta", 0, y0 + 12 * yStep);
for (i = 0; i & i++) {
U16 cs = (255 * (U32)i) /
U16 x = x0 +;
GUI_SetColor(cs);
GUI_DrawVLine(x, y0 , y0 + yStep - 1);
GUI_SetColor(0xff + (255 - cs) * 0x10100L);
GUI_DrawVLine(x, y0 + yStep, y0 + 2 * yStep - 1);
/* Green */
GUI_SetColor(cs&&8);
GUI_DrawVLine(x, y0 + 2 * yStep, y0 + 3 * yStep - 1);
GUI_SetColor(0xff00 + (255 - cs) * 0x10001L);
GUI_DrawVLine(x, y0 + 3 * yStep, y0 + 4 * yStep - 1);
/* Blue */
GUI_SetColor(cs * 0x10000L);
GUI_DrawVLine(x, y0 + 4 * yStep, y0 + 5 * yStep - 1);
GUI_SetColor(0xff0000 + (255 - cs) * 0x101L);
GUI_DrawVLine(x, y0 + 5 * yStep, y0 + 6 * yStep - 1);
/* Gray */
GUI_SetColor((U32)cs * 0x10101L);
GUI_DrawVLine(x, y0 + 6 * yStep, y0 + 7 * yStep - 1);
/* Yellow */
GUI_SetColor(cs * 0x101);
GUI_DrawVLine(x, y0 + 7 * yStep, y0 + 8 * yStep - 1);
GUI_SetColor(0xffff + (255 - cs) * 0x10000L);
GUI_DrawVLine(x, y0 + 8 * yStep, y0 + 9 * yStep - 1);
/* Cyan */
GUI_SetColor(cs * 0x10100L);
GUI_DrawVLine(x, y0 + 9 * yStep, y0 + 10 * yStep - 1);
GUI_SetColor(0xffff00 + (255 - cs) * 0x1L);
GUI_DrawVLine(x, y0 + 10 * yStep, y0 + 11 * yStep - 1);
/* Magenta */
GUI_SetColor(cs * 0x10001);
GUI_DrawVLine(x, y0 + 11 * yStep, y0 + 12 * yStep - 1);
GUI_SetColor(0xff00ff + (255 - cs) * 0x100L);
GUI_DrawVLine(x, y0 + 12 * yStep, y0 + 13 * yStep - 1);
12、下载到开发板运行如下图所示:
93c6f12ab30c2ae6beeef23b_719.jpg (0 Bytes, 下载次数: 0)
22:54 上传
13、以上就完成了ucGUI裸机移植的所有步骤,但是发现刷屏较慢。然后我们跟踪GUI_Clear()刷屏函数的执行情况,发现是void LCD_L0_FillRect(int x0, int y0, int x1, int y1)函数执行效率不高。于是将其修改如下:
void LCD_L0_FillRect(int x0, int y0, int x1, int y1)
LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);
重新烧写程序,发现刷屏速度大幅度提升!
14、ucGUI预定义了一些颜色,这些预定义是放在gui.h文件中。然而,我们发现这些颜色是以24bits的方式定义的。通过查询手册发现我们所使用的颜色被ucGUI定义成了“逻辑颜色” ,它通过最小平方偏移搜索的方式将其映射为“物理颜色”。所以在用户使用颜色时有很强的灵活性。
更多更精彩内容见晓梦逸尘的博客:
10:41 上传
点击文件名下载附件
1.35 MB, 下载次数: 4829
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间0 小时
好,正需要,太及时了
主题帖子精华
初级会员, 积分 89, 距离下一级还需 111 积分
在线时间0 小时
现在也刚开始学,谢谢分享
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间4 小时
想问你一个问题,我也是照你的这个历程移植的,但为什么总报错:..\ucGUI\LCDDriver\LCDDummy.c(447): error:& #134: expected a field name
f22d498e6d3605853eed3d_210.jpg (0 Bytes, 下载次数: 0)
22:54 上传
我是移到7英寸屏幕的,希望大神指点一下小弟,
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【4楼】s1q23:
---------------------------------
这个函数没有实现。请确认#define&LCD_CONTROLLER&&&&&(-1)&&和LCDDummay.c中开始位置的预处理宏定义是修改正确的。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间4 小时
回复【5楼】xiaomengyichen:
---------------------------------
#ifndef&LCDCONF_H
#define&LCDCONF_H
/*********************************************************************
*
*&&&&&&&&&&&&&&&&&&&General&configuration&of&LCD
*
**********************************************************************
*/
#define&LCD_XSIZE&&&&&&(800)&&&/*&X-resolution&of&LCD,&Logical&coor.&*/
#define&LCD_YSIZE&&&&&&(480)&&&/*&Y-resolution&of&LCD,&Logical&coor.&*/
#define&LCD_BITSPERPIXEL&(16)
#define&LCD_CONTROLLER&(-1)
&
#define&LCD_FIXEDPALETTE&&&(565)
#define&LCD_SWAP_RB&&&&&&&&(0)
&&&//红蓝反色交换
#define&LCD_INIT_CONTROLLER()&&LCD_Hard_Init();
&
#endif&/*&LCDCONF_H&*/
这就是我修改的,请问对吗?我用的AN1304&ATK-7’TFTLCD屏幕
主题帖子精华
初级会员, 积分 154, 距离下一级还需 46 积分
在线时间0 小时
强力支持,&&感谢无私分享&!!
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【6楼】s1q23:
---------------------------------
那个错误意思是没有找到那个函数,而且那个错误也不止一条。你的GUIConf.h配置看起来没问题。你再看看LCDDummay.c文件有没有加进来,这个文件中的前面的宏定义别忘了处理。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
中级会员, 积分 442, 距离下一级还需 58 积分
在线时间35 小时
很不错,收藏了
互联网,智能设备爱好者,欢迎讨论任何有意思的想法。
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间4 小时
大哥,能不能抽空帮我看看,研究了几天了实在找不出错误原因
11:34 上传
点击文件名下载附件
25.6 MB, 下载次数: 713
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【10楼】s1q23:
---------------------------------
你用的是mini开发板吗?
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间4 小时
回复【11楼】xiaomengyichen:
---------------------------------
不是,是战舰开发板
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【12楼】s1q23:
---------------------------------
你这样弄吧,你把LCDConf.h中的那个LCD的型号换成#define&LCD_CONTROLLER&(-2)&,然后选择修改LCDDriver目录下的LCDNull.c文件进行编译,修改这个文件和修改LCDDummay.c文件是一样的。编译LCDDummay.c的那个错误我现在也没有找出来。祝你好运!
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 157, 距离下一级还需 43 积分
在线时间4 小时
回复【13楼】xiaomengyichen:
---------------------------------
好的&谢谢指点
主题帖子精华
中级会员, 积分 422, 距离下一级还需 78 积分
在线时间0 小时
回复【楼主位】xiaomengyichen:
----------------------------这位大哥&我找来找去也没发现你在哪里有启动&ili93xx的--&void&LCD_hard_Init(void)
求指点
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【15楼】charlieholy:
---------------------------------
在LCDConf.h中有宏定义#define&LCD_INIT_CONTROLLER()&&LCD_hard_Init();语句。跟踪LCD_INIT_CONTROLLER()语句,可以发现它在LCDDummy.c中被调用的LCD_L0_Init()函数中被调用。然后再跟踪LCD_L0_Init(),可以发现他在ucCORE目录下的LCD.c文件中的&LCD_Init()函数中被调用,然后再跟踪LCD_Init()函数,发现它在GUI_Init()中被调用。所以,当在main()中调用GUI_Init()函数时就这样一路调用下去了。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
中级会员, 积分 422, 距离下一级还需 78 积分
在线时间0 小时
回复【16楼】xiaomengyichen:
---------------------------------
这位大哥真是热心人&谢谢啦
主题帖子精华
中级会员, 积分 422, 距离下一级还需 78 积分
在线时间0 小时
回复【16楼】xiaomengyichen:
---------------------------------
ucgui有调用过ILI9320中的功能函数吗
有的话能举几个例子吗
没有的话他都是自己实现基本操作函数的吗&比如画一条线之类的
主题帖子精华
中级会员, 积分 422, 距离下一级还需 78 积分
在线时间0 小时
回复【16楼】xiaomengyichen:
---------------------------------
哦&我找到了
主题帖子精华
中级会员, 积分 228, 距离下一级还需 272 积分
在线时间0 小时
xiaomengyichen&&您好,我用的也是mini的板子,下载到我的板子上是白屏啊,最新的那个mini板子
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【20楼】lixulongren:
---------------------------------
我不知道你说的那个最新的mini板子跟我一年前买的mini板子有什么区别。你用原子最新的液晶屏程序按照上面的步骤移植一下看看。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
中级会员, 积分 228, 距离下一级还需 272 积分
在线时间0 小时
GUIConf.h&&&GUITouchConf.h&&LCDConf.h&这三个文件你做的时候是怎么加载到Config文件夹的啊
主题帖子精华
初级会员, 积分 67, 距离下一级还需 133 积分
在线时间0 小时
回复【4楼】s1q23:
---------------------------------
我也遇到了这个问题&,请问您解决了么?
主题帖子精华
在线时间69 小时
mark&学习下
博观而约取,厚积而薄发。
主题帖子精华
初级会员, 积分 99, 距离下一级还需 101 积分
在线时间0 小时
呵呵,真是好人啊,我弄一上午都没弄得那GUI工程,你这个一下子就解决了,呵呵
主题帖子精华
新手上路, 积分 41, 距离下一级还需 9 积分
在线时间0 小时
回复【4楼】s1q23:
---------------------------------
你的结构体命名有冲突,把原来LCD.H中的LCD这个结构体换一个名字就可以了
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【26楼】紫尘小奇:
---------------------------------
你说的那个啊?我怎么没找到啊。也能编译通过啊。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 130, 距离下一级还需 70 积分
在线时间0 小时
回复【4楼】s1q23:
我也遇到这种情况了,请问你是怎么解决的,求指教.
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【28楼】浮夸:
---------------------------------
你按照12楼的做法弄一下看看
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 130, 距离下一级还需 70 积分
在线时间0 小时
回复【29楼】xiaomengyichen:
---------------------------------
12楼搞出来了没?
主题帖子精华
初级会员, 积分 130, 距离下一级还需 70 积分
在线时间0 小时
回复【29楼】xiaomengyichen:
---------------------------------
找到错误了、用FSMC刷液晶,里面LCD宏定义与系统文件中的冲突了
主题帖子精华
新手上路, 积分 23, 距离下一级还需 27 积分
在线时间0 小时
回复【31楼】浮夸:
---------------------------------
具体怎么改?
生命如花如蝶,稍纵即逝,只为了一道光芒,用尽了生命。
主题帖子精华
新手上路, 积分 23, 距离下一级还需 27 积分
在线时间0 小时
回复【32楼】xiuscut:
回复【31楼】浮夸:&---------------------------------&具体怎么改?
---------------------------------
改动有点大、、、、首先在ili93xx.h中的#define&LCD&&&&&&&&&&&&&((LCD_TypeDef&*)&LCD_BASE)&LCD改成别的名字例如LCD_,然后在ili93xx.c里把所有LCD-&LCD之类的LCD全部改成LCD_。感谢29楼和帖主。
生命如花如蝶,稍纵即逝,只为了一道光芒,用尽了生命。
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【33楼】xiuscut:
---------------------------------
谢谢支持!
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
初级会员, 积分 57, 距离下一级还需 143 积分
在线时间0 小时
本学期想把ucos学会用,希望大家多提供点。
主题帖子精华
新手上路, 积分 23, 距离下一级还需 27 积分
在线时间0 小时
回复【34楼】xiaomengyichen:
---------------------------------
其实可以在LCDConf.h里LCD_CONTROLLER&为9320(他不是有个推荐范围么/*&9320&-&&5420&*/)然后在LCDDummy.c里面把#if&(LCD_CONTROLLER&==&-1)&改成#if&(LCD_CONTROLLER&==&9320)&然后就行了。不过你要是改成-2,别忘了在LCDNull.c里改很多,按照LCDDummy.c里面把硬件初始化(就是对应的函数改一下),不过出了一个错误(估计是要在某个地方将LCDDummy用LCDNull代替,我没有去找~),我就没有弄了,直接弄回LCDDummy.c,只要改那一点点就好了。然后能工作了~~~
生命如花如蝶,稍纵即逝,只为了一道光芒,用尽了生命。
主题帖子精华
中级会员, 积分 288, 距离下一级还需 212 积分
在线时间0 小时
又是好资料,感谢楼主!
主题帖子精华
高级会员, 积分 620, 距离下一级还需 380 积分
在线时间104 小时
主题帖子精华
新手上路, 积分 45, 距离下一级还需 5 积分
在线时间1 小时
正准备搞系统的移植,楼主的帖子真是帮了初学者的忙了!
主题帖子精华
初级会员, 积分 61, 距离下一级还需 139 积分
在线时间3 小时
回复【楼主位】xiaomengyichen:
---------------------------------
打开LCDDummy.c文件,添加头文件包含#include&"ili93xx.h"后,&LCD_L0_SetPixelIndex(x0,&y,&LCD_COLORINDEX);这一条语句就出现错误,其中LCD_COLORINDEX下面还被标注了红色波浪线。不包含那个头文件就没这个错误,为什么呢?
主题帖子精华
初级会员, 积分 141, 距离下一级还需 59 积分
在线时间4 小时
mark,留下方便学习
主题帖子精华
新手上路, 积分 21, 距离下一级还需 29 积分
在线时间0 小时
compiling WM_Show.c...
compiling WM_StayOnTop.c...
compiling WM_Timer.c...
compiling WM_TimerExternal.c...
compiling WM_UserData.c...
compiling WM_Validate.c...
compiling WM_ValidateWindow.c...
compiling WMMemDev.c...
compiling WMTouch.c...
linking...
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_SetLUTEntry (referred from gui_setlutentry.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_SetOrg (referred from gui_setorg.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_Init (referred from lcd.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_On (referred from lcd.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol GUI_MEMDEV__APIList8 (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_DrawBitmap (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_DrawHLine (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_DrawVLine (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_FillRect (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_GetPixelIndex (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_SetPixelIndex (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol LCD_L0_XorPixel (referred from lcd_api.o).
..\OBJ\MySTM32.axf: Error: L6218E: Undefined symbol GUI_MEMDEV_Draw (referred from wm.o).
..\OBJ\MySTM32.axf: Not enough information to list image symbols.
..\OBJ\MySTM32.axf: Finished: 1 information, 0 warning and 13 error messages.
Target not created
移植的时候出现这种情况怎么解决啊?
主题帖子精华
初级会员, 积分 68, 距离下一级还需 132 积分
在线时间0 小时
楼主写的很好,很给力,谢谢分享
主题帖子精华
高级会员, 积分 919, 距离下一级还需 81 积分
在线时间28 小时
感谢29&32&楼主!
把看到的有意义的例子进行扩充,并将其切实的运用到自己的设计中。
应用确实不容易,水平是在不断的实践中完善和发展的。
主题帖子精华
新手上路, 积分 50, 距离下一级还需 0 积分
在线时间0 小时
回复【20楼】lixulongren:
---------------------------------
你好我下载进去也是白屏的请问朋友你解决了吗?mini板V2.0的
主题帖子精华
初级会员, 积分 161, 距离下一级还需 39 积分
在线时间8 小时
回复【45楼】lianjiawei18:
---------------------------------
你在原子LCD程序的基础上按照步骤做下去试试。或者把下下来的文件中的LCD的部分换成你板子上能够正确运行的LCD的程序。
暂不做硬件,投身机器学习和数据挖掘。欢迎交流!
主题帖子精华
中级会员, 积分 388, 距离下一级还需 112 积分
在线时间1 小时
mark,,,,,,,
主题帖子精华
中级会员, 积分 224, 距离下一级还需 276 积分
在线时间22 小时
下载完程序之后要过很久才可以显示那些图片,楼主有什么好的方法么?&我那个LCD_FILL也改了啊!
主题帖子精华
初级会员, 积分 100, 距离下一级还需 100 积分
在线时间1 小时
存下来备用&后面再细看
主题帖子精华
初级会员, 积分 53, 距离下一级还需 147 积分
在线时间0 小时
回复【14楼】s1q23:
---------------------------------
你移植成功了吗
Powered by查看: 50480|回复: 391
把Lua移植到stm32上,效果不错!
因为我们产品的需要满足不同行业需求,所以一直在寻找一个脚本语言,以便灵活配置。
前段时间还自己花时间去实现一个C语言解释器,看了一堆编译原理的东西,以及虚拟机等,头都搞大了,把基本功能实现了,但总是不满意。
后来看到lua,网上一搜:
才知道 魔兽世界 的插件就是lua写的....
,愤怒的小鸟也是lua写的,lua在苹果和android都支持lua语言开发,lua已经成为移动平台开发的新贵...
lua是纯c写的最高效的脚本语言...
恍然大悟,原来lua就是我要找的东西啊!正所谓:梦里寻他千百度,蓦然回首,那人却在灯火阑珊处!于是立即产生了把lua移植到stm32的想法。
到网上查了半天stm32移植lua的资料,居然一篇都没有找到,失望啊。
难道我是第一个干这事的蠢人?没办法,只好硬着头皮上了!
lua果然名不虚传,代码极其简略,移植性极高,由标准ansi c写成。移植过程非常顺利,在IAR下编译后只有几十K字节。
编译了一个bin下载到stm32后,立马就顺利运行起来。
为了测试lua的内存的需求,我把ram设置到48k字节,结果运行很顺利。看来lua对内存的需求确实很小。
在STM32处于24M的频率下,测试了一下lua脚本的运行效率,大致为每秒2万次浮点计算。 (在我的电脑上测试lua是每秒1千万次运算)。
如果stm32设置到72M的话,大致应该是每秒6万次浮点运算。
花了几分钟时间,通过lua c api实现了几个api函数让lua调用,感觉lua和c的交互调用确实极其方便。
int main(){
& &&&Sys_TimerInit();
& &&&SerialPort_Init();
& &&&IWDG_Configuration();
& &&&WWDG_Configuration();
& &&&__set_PRIMASK(0);
& &&&Sys_TimerRequest(OTimerID7,50,1);
& & // 这是main里面的调用lua
& &&&L& &= lua_open();& && &
& &&&luaopen_base(L);& &
& &&&//注_册自己的c函数到lua中
& &&&lua_register(L, &average&, average);& &&&
& &&&lua_register(L, &Lsleep&, Lsleep);
& &&&lua_register(L, &Lmyputs0&, Lmyputs0);& &&&
& &&&InitTasks();
& &&&AddTask(facetask,1);
& &&&AddTask(uart0task,1);& &&&
& &&&float a,c2;
& &&&char buf[100];
& & //这里是lua脚本, 脚本里面又调用了自己定义得c函数, Lmyputs0---串口输出函数& &average --平均值函数,&&Lsleep--延时函数
& & strcpy(buf,& Lmyputs0(\&start!\&,6); c2=2; a1 = {\&one\&,\&two\&,\&three\&}& & a=average(10, 20, 30, 40, 50); count=0;&&while 1&0 do&&\r\n&&count=count+1;&&Lmyputs0(a1[(count%3)+1],6);&&Lsleep(300); \r\ \r\n Lmyputs0(\&end!\&,4)&);
& & //让lua运行脚本!
& &&&luaL_dostring(L, buf);
//下面是几定义的函数
static int average(lua_State *L)
/* 得到参数个数 */
int n = lua_gettop(L);
double sum = 0;
/* 循环求参数之和 */
for (i = 1; i &= i++)
/* 求和 */
sum += lua_tonumber(L, i);
/* 压入平均值 */
lua_pushnumber(L, sum / n);
/* 压入和 */
lua_pushnumber(L, sum);
/* 返回返回值的个数 */
static int Lsleep(lua_State *L){
&&PT_Timer_t tmr0;
&&d=lua_tonumber(L, 1);&&
&&PT_TimerSet(&tmr0,d);
&&while(PT_TimerExpired(&tmr0)==false){
& & WDT_FLAG = 0;
& & RunTaskList();
&&lua_pushnumber(L, 1);
&&return 1;
static int Lmyputs0(lua_State *L)
& &buf=(char *)lua_tostring(L,1);
& &len=lua_tonumber(L, 2);
& &myputs0(buf,len);
& &lua_pushnumber(L, 1);
& &return 1;
//---------------附lua的说明------------------------
Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。
Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
-----------------------------------------------------------------------------
lua语言已经成为排名第十名的语言,(javascript在十一名)
Mark,有用的东西。
lua 支持面向对象编程,支持多线程并发。
stm32平台上有了lua,这些都有了,有的应用连操作系统都可以不用移植,用lua就可以了。
mark 孤陋寡闻了
第一次听说,查查资料看看
噢?还不太明白。过后看看。楼主多讲解,给我们扫盲。
LZ有详细的手册吗?
ethernut 的 Nut/OS 很早就有LUA的支持了,只是最近一直没有啥进展,仍然是第一次发布的东西。。
在单片机上移植LUA,需要裁减很多东西。。STM32不知道是否需要裁减不。。
IBM的 deleloperworks 上有相关的文章:
/developerworks/cn/linux/l-lua.html
有空也搞搞,再加一段解压代码
32位单片机可以看看elua,专门针对单片机的lua版本,支持stm32,ram极省,硬件资源都封装好了http://www.eluaproject.net/
lua默认用浮点来表示数字,可以改成整型,在不支持硬件浮点运算的cpu上效率会更高
不过lua默认不支持位运算,有点麻烦,需扩展一下
此贴必须MARK
第一次听说,扫盲了。
真的&&没听说我lua& &有时间得了解了解
这个要看看
曾经用过一段时间的lua,真的很好用的一个脚本语言。
mark!!!
LZ能分享例子代码不?
用过lua ~
stm32的话可能应用复杂点了以后还是会稍显吃力吧?
毕竟是在C的基础上多包出来的一层
等楼主实测结果了,呵呵~
第一次听说
mark,期待楼主扫盲。
在stm32上移植Lua不用做任何裁剪。
下载Lua源码,(我用的是5.1.4,很新的版本),把c文件添加到工程(lua.c,luac.c两个文件不用加),然后编译即可通过,无需修改一个字符。(选择lib为full),
接下来,就可以开始享受stm32上的Lua之旅!
Lua全编译也只有48k字节左右,所以不裁剪都是可以的。本身的Ram需求则在26K字节左右,Stm32应该是可以承受的。
在main 里面,或者其他函数里面:
& &&&L& &= lua_open();& && &
& &&&luaopen_base(L);& &
& &&&//buf里面就是lua脚本了 ,自己写好;
& &&&luaL_dostring(L, buf);
就可以了。就这么简单!
Lua可以和c无缝集成,c结合Lua后,则是如虎添翼。不要仅仅是把Lua当做是一门新的语言,这个世界优秀的语言已经很多了,不差Lua一个,虽然Lua语言也极其优秀。
Lua是一种新的开发方式,它带来的改变甚至是革_命性的!它可以让整个应用的逻辑以Lua脚本和原生语言的方式进行混合实现,而且比例任意切分。它可以让产品中相对不变的硬件代码和变化不定的用户业务逻辑充分结合起来。它可以让产品随时更新功能而无需重新编译!它甚至可以让用户和你一起来分工实现一个应用代码,同时又很好的保护了你的核心技术。
Java高调提倡的一次编写,到处运行的思想,在单片机里是行不通的,
而Lua则悄无声息的实现了,而且是那么易如反掌!而且是这么彻底,不受限于一次编写,还可以随时改写。
所以Lua才真正是做到了一次编写,到处运行,并可随意再次改写,所以她横跨了PC,服务器,苹果,安卓,PSP,以及单片机!&&她横跨了windows,linux,ios,ucos,以及裸奔的单片机代码!
感谢Lua的开创者,感谢他们为这个世界创造了如此美妙的Lua !
学习了! 这下又要折腾起来喽...
Lua移植到stm32&&意义何在?
Lua移植到stm32&&意义何在?
楼主多解释解释吧?比如用lua好处,还有使用的注意事项??
想问下,脚本语言是干嘛用的,单片机程序里用它可以做什么呢?
谢谢楼主。
1,请教一下,把LUA所有的源码都包括进去(除了lua.c,luac.c)?
2,LUA的PRINT函数是对窗口的,而STM32是不是应该修改成对串口输出?
3,用了LUA主要在哪方面提高单片机的威力?
另:昨天看了一晚上LUA,感觉LUA是个不错的语言。
有很多ARM7,CORTEX-M3移植了LUA语言。
听LZ如此说,觉得挺感兴趣的,
LZ能不能讲讲LUA的用处,及移植的难度!
确实有意思,有空玩一下
回复【39楼】Excellence 精益求精
-----------------------------------------------------------------------
对,不用print,用自己的串口输出函数就可以。
至于Lua在哪方面提高单片机的威力。这个要看自己如何运用了。
最简单的用法:
实现配置参数,比如我们原来的产品要有些参数来控制产品运行方式,一般要实现一个参数配置协议,然后呢,还要提供一个参数配置软件等。用Lua脚本就直接搞定(para1=... ; para2=....,& &para3=....& &&&),c里面很容易就得到脚本里面的值(tonumber,tosring),而且一目了然,可以让用户直接修改脚本,就实现了参数修改了。是不是比ini,xml文件更简单,更方便?用户现场他想改就改。
更深入点的用法:
我们的产品,有个计算公式,是根据用户的应用变化的,并且鬼知道用户想用个什么公式来计算,那么很简单,把这个公式用lua脚本实现一个公式计算函数,就可以了,我们的c可以调用lua里面定义的函数,这个公式可以有多复杂?想想愤怒的小鸟里面那么精确的重力抛物线计算都可以实现,就知道了。并且可以得到函数返回值。用户现场他想改就改。
更深入点的用法:
我们的产品,有个控制过程,是根据用户的应用变化的,并且鬼知道用户想用个什么过程来控制,那么很简单,把这个公司用lua脚本实现一个过程函数,就可以了,我们的c可以调用lua里面定义的过程函数。实现用户希望的过程控制,用户现场他想改就改。
更深入的用法:
我们的用户很牛X,他想控制连整个运行方式,那么好,我们提供c api,提供后台任务,用户前台控制任务他自己用Lua去编写.用户现场他想改就改。
更深入的用法:
我们的一些用户更牛X,他想直接控制整个硬件,只是自己不实现硬件,那么好,我们提供c api,把单片机的AD, DA ,PWM,Timer,中断全部都注_册成lua函数,他想怎么玩就怎么玩。 参见:elua,&&www.eluaproject.net
更深入的用法:
除了这些,lua提供文件系统,提供web server,提供socket,提供线程.....,提供shell,提供操作系统的很多东东,但又不是操作系统。参见:elua,&&www.eluaproject.net
就看你怎么用了。
强大,第一次听说
不懂脚本语言,LZ介绍下脚本语言的真正实用价值吧?方便了什么?
确实不错。
谢谢楼主。
能做到开发灵活又能兼顾最终用户的再应用,一直使我们需要的,谢
关于移植,各位懂的也来讲讲,俺也想玩玩!
看了下里面好多文件操作的函数fprintf fopen fcolse
等等,请问这些移植是如何处理!
嗯,实际上我开始移植也遇到了fprintf, stdin stdout等,本来以为要动刀改写,但是查了查资料,fprintf,stdin等都是ansi c标准,按道理编译器都应该支持,于是想了一下,可能是IAR库不全,结果果然是这个原因:
Options-&General Options-&Library Configuration& &:&&Full
就可以了。
去掉lua.c ,luac.c ,这是shell,我们不需要。
保证一次编译通过,呵呵。
是啊,这些函数编译器支持,
但是目标环境不支持啊!
如果下载下独立的运行MCU中,这个功能实现不了
而且还占用了程序空间。
回复【50楼】clingos
-----------------------------------------------------------------------
实际上是可以裁剪去掉这部分代码的,稍微花点时间就可以了。这样代码就更小了。
好东西. lua 灵活配置
强帖mark!
按照楼主方法不成功!
KEIL 的重错误:
.\out\MyWork.axf: Error: L6218E: Undefined symbol getenv (referred from loadlib.o).
.\out\MyWork.axf: Error: L6218E: Undefined symbol clock (referred from loslib.o).
.\out\MyWork.axf: Error: L6218E: Undefined symbol exit (referred from loslib.o).
.\out\MyWork.axf: Error: L6218E: Undefined symbol system (referred from loslib.o).
.\out\MyWork.axf: Error: L6218E: Undefined symbol time (referred from loslib.o).
///////////////////
#include &stm32f10x.h&
#include &stdio.h&
#include &math.h&
#include &stdlib.h&
#include &USART.h&
#include &stm32f10x_it.h&
#include &lua.h&
#include &lauxlib.h&
#include &lualib.h&
///////////////////////
int main(void)
& & & &&&lua_State *L ;
& & & & RCC_Configuration();& & & &
& & & & NVIC_Configuration();
& & & & GPIO_Configuration();
& & & & USART1_Configuration();
& & & & DMA_Configuration();
& & & & AD1_Configuration();
& & & & TIM_Configuration();
& & & & L = lua_open();
& & & & luaL_openlibs(L);
& & & && &
& & & & while(1) ;
请高手帮忙看看那里出问题了
无需openlibs这句函数啊。
L& &= lua_open();& && &&&
& &&&luaopen_base(L);& &&&
& &&&//buf里面就是lua脚本了 ,自己写好;
& &&&luaL_dostring(L, buf);
Mark,PSP上也有Lua解释器
(原文件名:QQ截图未命名.jpg)
我什么都没干,呵呵
应该有搞头!
回复【59楼】jiaowoxiaolu 呀咩爹!
-----------------------------------------------------------------------
我什么都没干,呵呵
应该有搞头!
--------嘻嘻,简单吧-------------
再请教楼主:
1,你把LUA用到STM32,是不是还得有个上位机软件?和STM32通讯,方便修改LUA的一下源代码?
2,把LUA编译成BIN烧到STM32中,如果要修改,是不是还得烧写,我看你上面说的还像是不用,不太理解。
& &你上面说可以现场修改。能否举了例子?
回复【61楼】Excellence 精益求精
-----------------------------------------------------------------------
当然你得想个办法把Lua脚本文件内容下载到stm32中去。
就是你的代码得支持通过串口下载Lua脚本到Flash或EEprom里面保存,以及通过串口可以读出。
LUA是编译成Bin了,但Lua脚本完全不用编译成bin啊。
现场修改当然得在你实现了串口下载Lua脚本之后了,呵呵。当然如果你的板子支持SD卡,用SD卡拷贝脚本就更简单了。
我找了一个KEIL STM32的例程,编译报错:
Build target 'Target 1'
compiling lapi.c...
..\HARDWARE\LED\lapi.c(975): error:&&#268: declaration may not appear after executable statement in block
..\HARDWARE\LED\lapi.c:& && && &lu_mem a = (cast(lu_mem, data) && 10);
..\HARDWARE\LED\lapi.c:& && && &^
..\HARDWARE\LED\lapi.c: ..\HARDWARE\LED\lapi.c: 0 warnings, 1 error
compiling lbaselib.c...
..\HARDWARE\LED\lbaselib.c(495): error:&&#268: declaration may not appear after executable statement in block
..\HARDWARE\LED\lbaselib.c:& &&&void *res = luaR_findglobal(keyname, strlen(keyname));
..\HARDWARE\LED\lbaselib.c:& &&&^
..\HARDWARE\LED\lbaselib.c: ..\HARDWARE\LED\lbaselib.c: 0 warnings, 1 error
compiling ldump.c...
..\HARDWARE\LED\ldump.c(8): error:&&#5: cannot open source input file &sys/types.h&: No such file or directory
..\HARDWARE\LED\ldump.c:& &#include &sys/types.h&
..\HARDWARE\LED\ldump.c:& && && && && && && && & ^
..\HARDWARE\LED\ldump.c: ..\HARDWARE\LED\ldump.c: 0 warnings, 1 error
compiling lgc.c...
..\HARDWARE\LED\lgc.c(618): error:&&#268: declaration may not appear after executable statement in block
..\HARDWARE\LED\lgc.c:& &&&l_mem lim = (GCSTEPSIZE/100) * g-&
..\HARDWARE\LED\lgc.c:& &&&^
..\HARDWARE\LED\lgc.c: ..\HARDWARE\LED\lgc.c: 0 warnings, 1 error
compiling linit.c...
..\HARDWARE\LED\linit.c(17): error:&&#5: cannot open source input file &platform_conf.h&: No such file or directory
..\HARDWARE\LED\linit.c:& &#include &platform_conf.h&
..\HARDWARE\LED\linit.c:& && && && && && && && && &&&^
..\HARDWARE\LED\linit.c: ..\HARDWARE\LED\linit.c: 0 warnings, 1 error
compiling loadlib.c...
..\HARDWARE\LED\loadlib.c(463): error:&&#268: declaration may not appear after executable statement in block
..\HARDWARE\LED\loadlib.c:& &&&void *res = luaR_findglobal(name, strlen(name));
..\HARDWARE\LED\loadlib.c:& &&&^
..\HARDWARE\LED\loadlib.c(554): error:&&#268: declaration may not appear after executable statement in block
..\HARDWARE\LED\loadlib.c:& &&&int loaded = lua_gettop(L) + 1;&&/* index of _LOADED table */
..\HARDWARE\LED\loadlib.c:& &&&^
..\HARDWARE\LED\loadlib.c: ..\HARDWARE\LED\loadlib.c: 0 warnings, 2 errors
compiling lstate.c...
..\HARDWARE\LED\lstate.c(25): error:&&#5: cannot open source input file &platform_conf.h&: No such file or directory
..\HARDWARE\LED\lstate.c:& &#include &platform_conf.h&
..\HARDWARE\LED\lstate.c:& && && && && && && && && &&&^
..\HARDWARE\LED\lstate.c: ..\HARDWARE\LED\lstate.c: 0 warnings, 1 error
Target not created
LS能否把网上找到的东西放上来看看
想了想,这个LUA是不是前阵子坛里讨论的一个OS和APP分离的概念有点类似,lua解析器就像win7,然后lua脚本就像qq一样在运行,如果stm32加个TFT然后弄个FAT文件系统,把lua脚本放在sd卡里面,tft显示脚本列表,然后想运行哪个就运行哪个,是不是可以这样?
楼主放一个编译好的列子吧! 我的老是编译不过
刚才发现下载的源代码不全。居然结构图里缺两个变量。
看版本完全一样,而且刚下了一个5.1.4的缺变量。
ttislightfunction没定义。
下面的结构图缺两个变量。
typedef struct global_State {
&&&&/* hash table for strings */
&&lua_A&&/* function to reallocate memory */
&&void *& && && &/* auxiliary data to `frealloc' */
&&lu_&&/* state of garbage collector */
&&&&/* position of sweep in `strt' */
&&GCObject *&&/* list of all collectable objects */
&&GCObject **&&/* position of sweep in `rootgc' */
&&GCObject *&&/* list of gray objects */
&&GCObject *&&/* list of objects to be traversed atomically */
&&GCObject *&&/* list of weak tables (to be cleared) */
&&GCObject *&&/* last element of list of userdata to be GC */
&&M&&/* temporary buffer for string concatentation */
&&lu_mem GC
&&lu_&&/* number of bytes currently allocated */
&&lu_&&/* an estimate of number of bytes actually in use */
&&lu_&&/* how much GC is `behind schedule' */
&&&&/* size of pause between successive GCs */
&&&&/* GC `granularity' */
&&lua_CF&&/* to be called in unprotected errors */
&&TValue l_
&&struct lua_State *
&&UpV&&/* head of double-linked list of all open upvalues */
&&struct Table *mt[NUM_TAGS];&&/* metatables for basic types */
&&TString *tmname[TM_N];&&/* array with tag-method names */
} global_S
回复【65楼】jiaowoxiaolu 呀咩爹!
-----------------------------------------------------------------------
嗯,应该是这个概念。
如果有Lua+FAT文件系统+ SD卡+ 再加一个shell接口, 通过串口超级终端进行交互, 就可以打造一个&LuaDOS&系统出来。
这么一个“LuaDOS”系统,运行在一个STM32上,感觉不错哈。
哈哈!编译过了,运来是 选了KEIL中设置一下
(原文件名:11211.JPG)
回复【67楼】Excellence 精益求精
-----------------------------------------------------------------------
你用IAR编译的吗?我编译5.1.3, 5.1.4都没有问题啊。
哈哈!编译过了,运来是 选了KEIL中设置一下
(原文件名:11211.JPG)
哈哈!编译过了,运来是 选了KEIL中设置一下
(原文件名:11211.JPG)
(原文件名:luaset.GIF)
IAR里面是这样的哈。
回复【73楼】smset 众山科技
(原文件名:luaset.gif)
iar里面是这样的哈。
-----------------------------------------------------------------------
smset 有具体点得列子嘛?
IAR EWARM5.3编译通过。但有35警告。
KEIL MDK 4.12编译不过。报警如下:
Build target 'STM3210E-EVAL'
linking...
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol abort (referred from ldo.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol getenv (referred from loadlib.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol clock (referred from loslib.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol exit (referred from loslib.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol system (referred from loslib.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol time (referred from loslib.o).
.\Obj\STM3210E-EVAL.axf: Error: L6218E: Undefined symbol __vfscanf_char_file (referred from __0fscanf.o).
.\Obj\STM3210E-EVAL.axf: Not enough information to list image symbols.
.\Obj\STM3210E-EVAL.axf: Finished: 1 information, 0 warning and 7 error messages.
Target not created
MDK 看72楼
回复【75楼】Excellence 精益求精
-----------------------------------------------------------------------
那应该是你的库不全。
IAR EWARM和KEIL MDK 都设置了。
我下的源代码lua-5.1.4.tar.gz,直接解压,
发现代码缺东西。重新找了一个,也不行。
能否把5.1.4的源码上传一下。
就是从官网上下载的啊。
http://www.lua.org/download.html
我刚刚移植成功的。lua 5.1.4 (原文件名:lua-5.1.4.rar)
LUA源代码。 (原文件名:lua-5.1.4.rar)
网上下的。在LUA主页,有问题。
不顺利。看来的烧香。呵呵。
各位测试下直接用C编译成BIN的程序跟用LUA执行的程序性能差别多少呢?运算速度和实时性。
去搬凳子过来
点击此处下载
(原文件名:lua-5.1.4.rar)
我用的src,不好意思,里面还有一个cbuider的测试lua的目录,所以比较大。
http://www.eluaproject.net/
这里有很不错的一个lua移植。连驱动都做好了。
lua确实不错,wavecom的q26系列就支持了
回复【80楼】luozhongchao
我刚刚移植成功的。lua 5.1.4 (原文件名:lua-5.1.4.rar)&&
-----------------------------------------------------------------------
1,加入C文件,编译没问题。
2,加入LUA函数,编译报错。
#include &lua.h&
#include &lauxlib.h&
#include &lualib.h&
///////////////////////
int main(void)
lua_State *L ;
& &&&L& &= lua_open();& && && &
& &&&luaopen_base(L);
错误如下:
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_open was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_tmpnam was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but remove was referenced
TEST.axf: Finished: 0 information, 0 warning and 4 error messages.
KEIL MDK 4.12工程文件 (原文件名:led.rar)
回复【85楼】smset 众山科技
点击此处下载&&(原文件名:lua-5.1.4.rar)&&
我用的src,不好意思,里面还有一个cbuider的测试lua的目录,所以比较大。
-----------------------------------------------------------------------
谢谢,我试试。。。
可能是我哪儿设置不对。
但你说的地方,我设置了。
看来和源代码没关系。
用了楼主的,也报错。可能是我的工程文件和LUA源码有冲突。
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_open was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _sys_tmpnam was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but _ttywrch was referenced
TEST.axf: Error: L6915E: Library reports error: __use_no_semihosting was requested, but remove was referenced
TEST.axf: Finished: 0 information, 0 warning and 4 error messages.
Target not created
第一次听说,了解一下。
看上去很不错,看是否有必要移植到我的系统上.
//#pragma import(__use_no_semihosting)& &
解决了,谢谢楼主和luozhongchao。
上传一个简单的工程文件。
点击此处下载
(原文件名:led.rar)
在stm32上,对比了一下速度,纯粹的Lua脚本函数运算的速度,大致是编译的C函数的10分之一~~~30分之一之间。
但是实际系统里面是脚本和c混合运行的,所以混合了Lua的系统总体速度会更快些。
中文LUA编程。 (原文件名:.pdf)
阿莫电子论坛, 原"中国电子开发网"

我要回帖

更多关于 stm32 lwip移植 的文章

 

随机推荐