luat_msh_rtt.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "luat_base.h"
  2. #include "luat_malloc.h"
  3. #include "luat_msgbus.h"
  4. #include "luat_timer.h"
  5. #include "luat_gpio.h"
  6. #define LUAT_LOG_TAG "msh"
  7. #include "luat_log.h"
  8. #include "luat_dbg.h"
  9. #include "rtthread.h"
  10. #include <rtdevice.h>
  11. #ifdef FINSH_USING_MSH
  12. extern lua_State *L;
  13. static int msgbus_handler(lua_State *L, void* ptr) {
  14. int re = luaL_dostring(L, (const char*)ptr);
  15. if (re) {
  16. LLOGE("luaL_dostring return re != 0\n");
  17. LLOGE(lua_tostring(L, -1));
  18. }
  19. luat_heap_free(ptr);
  20. return 0;
  21. }
  22. static void loadstr(int argc, char**argv) {
  23. if (argc < 2)
  24. return;
  25. char* buff = luat_heap_malloc(strlen(argv[1])+1);
  26. strcpy(buff, argv[1]);
  27. rtos_msg_t msg;
  28. msg.handler = msgbus_handler;
  29. msg.ptr = buff;
  30. luat_msgbus_put(&msg, 0);
  31. };
  32. #include "luat_dbg.h"
  33. static void dbg(int argc, char**argv) {
  34. if (argc < 2)
  35. return;
  36. if (!strcmp("start", argv[1])) {
  37. luat_dbg_set_hook_state(2);
  38. }
  39. else if (!strcmp("next", argv[1]) || !strcmp("step", argv[1])) {
  40. luat_dbg_set_hook_state(4);
  41. }
  42. else if (!strcmp("stepin", argv[1]) || !strcmp("stepIn", argv[1])) {
  43. luat_dbg_set_hook_state(5);
  44. }
  45. else if (!strcmp("stepout", argv[1]) || !strcmp("stepOut", argv[1])) {
  46. luat_dbg_set_hook_state(6);
  47. }
  48. else if (!strcmp("continue", argv[1])) {
  49. luat_dbg_set_hook_state(2);
  50. }
  51. else if (!strcmp("bt", argv[1])) {
  52. if (argc > 2) {
  53. luat_dbg_set_runcb(luat_dbg_backtrace, (void*)atoi(argv[2]));
  54. }
  55. else {
  56. luat_dbg_set_runcb(luat_dbg_backtrace, (void*)-1);
  57. }
  58. }
  59. else if (!strcmp("vars", argv[1])) {
  60. if (argc > 2) {
  61. luat_dbg_set_runcb(luat_dbg_vars, (void*)atoi(argv[2]));
  62. }
  63. else {
  64. luat_dbg_set_runcb(luat_dbg_vars, (void*)0);
  65. }
  66. }
  67. else if (!strcmp("break", argv[1])) {
  68. if (!strcmp("add", argv[2]) && argc == 5) {
  69. luat_dbg_breakpoint_add(argv[3], atoi(argv[4]));
  70. }
  71. else if (!strcmp("del", argv[2]) && argc == 4) {
  72. luat_dbg_breakpoint_del(atoi(argv[3]));
  73. }
  74. else if (!strcmp("clr", argv[2]) || !strcmp("clear", argv[2])) {
  75. if (argc > 3)
  76. luat_dbg_breakpoint_clear(argv[3]);
  77. else
  78. luat_dbg_breakpoint_clear(NULL);
  79. }
  80. }
  81. };
  82. MSH_CMD_EXPORT(loadstr , run lua code);
  83. MSH_CMD_EXPORT(dbg , luat debugger);
  84. #endif