最近做了一个控制机械臂的程序,使用C语言开发的,调试的时候总是需要修改代码来调整运动轨迹,
总是要编译,实在烦人
不过有个方法就是使用lua来调试运动逻辑
代码如下:
- static int lua_getPos(lua_State*l)
- {
- int x,y;
- x=getX();
- y=getY();
- lua_pushnumber(l,x);
- lua_pushnumber(l,y);
- return 2;//返回两个整数到lua
- }
-
- static int lua_isrunning(lua_State*l)
- {
- int isRun=getIsRuning();
- lua_pushnumber(l,isRun);
- return 1;//返回一个整数到lua
- }
-
- static int lua_up(lua_State*l)
- {
- size_t step=luaL_checkinteger(l,1);
- //向上动作
- up(step);
- return 0;
- }
-
- static int lua_down(lua_State*l)
- {
- size_t step=luaL_checkinteger(l,1);
- //向下动作
- down(step);
- return 0;
- }
-
- static int lua_left(lua_State*l)
- {
- size_t step=luaL_checkinteger(l,1);
- //向左动作
- left(step);
- return 0;
- }
-
- static int lua_right(lua_State*l)
- {
- size_t step=luaL_checkinteger(l,1);
- //向右动作
- right(step);
- return 0;
- }
-
-
- lua_State* initLua()
- {
- lua_State *L;
- L=luaL_newstate();
- luaL_openlibs(L);
- lua_checkstack(L,1000);
-
-
- lua_register(L,"go_left",lua_left);
- lua_register(L,"go_right",lua_rigit);
- lua_register(L,"go_up",lua_up);
- lua_register(L,"go_down",lua_down);
- lua_register(L,"isRunning",lua_isrunning);
- lua_register(L,"getPos",lua_getPos);
- return L;
- }
-
-
- lua_State* LoadScript(char *file)
- {
-
- lua_State* L=initLua();
- if(luaL_loadfile(L,file)||lua_pcall(L,0,0,0))
- {
- lua_pop(L,1);
- lua_close(L);
- return NULL;
- }
- return L;
- }
-
- int main(int argc,char **argv)
- {
- loadScript(argv[1]);
- }
编译需要链接lua库,之后运行程序的时候,指定一个lua脚本就可以了,以下是示例
- --main.lua
- --向左走10步
- go_left(10)
- --向下走100步
- go_down(100)
- --向耐听走15步
- go_right(15)
-
- x,y=getPos()
- print("x="..x..",y="..y)
-
- running=isRunning()
-
- if(running)
- print("is Running")