• 如何让你的程序支持lua脚本


    最近做了一个控制机械臂的程序,使用C语言开发的,调试的时候总是需要修改代码来调整运动轨迹,

    总是要编译,实在烦人

    不过有个方法就是使用lua来调试运动逻辑

    代码如下:

    1. static int lua_getPos(lua_State*l)
    2. {
    3. int x,y;
    4. x=getX();
    5. y=getY();
    6. lua_pushnumber(l,x);
    7. lua_pushnumber(l,y);
    8. return 2;//返回两个整数到lua
    9. }
    10. static int lua_isrunning(lua_State*l)
    11. {
    12. int isRun=getIsRuning();
    13. lua_pushnumber(l,isRun);
    14. return 1;//返回一个整数到lua
    15. }
    16. static int lua_up(lua_State*l)
    17. {
    18. size_t step=luaL_checkinteger(l,1);
    19. //向上动作
    20. up(step);
    21. return 0;
    22. }
    23. static int lua_down(lua_State*l)
    24. {
    25. size_t step=luaL_checkinteger(l,1);
    26. //向下动作
    27. down(step);
    28. return 0;
    29. }
    30. static int lua_left(lua_State*l)
    31. {
    32. size_t step=luaL_checkinteger(l,1);
    33. //向左动作
    34. left(step);
    35. return 0;
    36. }
    37. static int lua_right(lua_State*l)
    38. {
    39. size_t step=luaL_checkinteger(l,1);
    40. //向右动作
    41. right(step);
    42. return 0;
    43. }
    44. lua_State* initLua()
    45. {
    46. lua_State *L;
    47. L=luaL_newstate();
    48. luaL_openlibs(L);
    49. lua_checkstack(L,1000);
    50. lua_register(L,"go_left",lua_left);
    51. lua_register(L,"go_right",lua_rigit);
    52. lua_register(L,"go_up",lua_up);
    53. lua_register(L,"go_down",lua_down);
    54. lua_register(L,"isRunning",lua_isrunning);
    55. lua_register(L,"getPos",lua_getPos);
    56. return L;
    57. }
    58. lua_State* LoadScript(char *file)
    59. {
    60. lua_State* L=initLua();
    61. if(luaL_loadfile(L,file)||lua_pcall(L,0,0,0))
    62. {
    63. lua_pop(L,1);
    64. lua_close(L);
    65. return NULL;
    66. }
    67. return L;
    68. }
    69. int main(int argc,char **argv)
    70. {
    71. loadScript(argv[1]);
    72. }

    编译需要链接lua库,之后运行程序的时候,指定一个lua脚本就可以了,以下是示例

    1. --main.lua
    2. --向左走10步
    3. go_left(10)
    4. --向下走100步
    5. go_down(100)
    6. --向耐听走15步
    7. go_right(15)
    8. x,y=getPos()
    9. print("x="..x..",y="..y)
    10. running=isRunning()
    11. if(running)
    12. print("is Running")

  • 相关阅读:
    IDEA2024都更新了什么???
    Java.lang.Class类 isAnonymousClass()方法有什么功能呢?
    MySQL基础入门教程(InsCode AI 创作助手)
    云原生的简单理解
    O(N)求组合数
    MyBatis使用mapper代理方式完成入门案例(对数据库进行查询)
    STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片
    react的组件和元素的类型总结
    第二周学习报告
    分布式光伏站远程监控组网方案
  • 原文地址:https://blog.csdn.net/kof98765/article/details/133761068