Jelajahi Sumber

add:16进制打印,mcu寄存器或者ram直接操作demo

alienwalker 4 tahun lalu
induk
melakukan
9303cbb672
3 mengubah file dengan 34 tambahan dan 0 penghapusan
  1. 0 0
      demo/mcu_reg/.gitignore
  2. 17 0
      demo/mcu_reg/Air105/main.lua
  3. 17 0
      luat/modules/luat_lib_mcu.c

+ 0 - 0
demo/mcu_reg/.gitignore


+ 17 - 0
demo/mcu_reg/Air105/main.lua

@@ -0,0 +1,17 @@
+
+-- LuaTools需要PROJECT和VERSION这两个信息
+PROJECT = "test"
+VERSION = "1.0.0"
+
+-- sys库是标配
+_G.sys = require("sys")
+
+log.info('read 0x20090000', mcu.x32(mcu.reg32(0x20090000))) --读取0x20090000这个地址的值
+log.info('write 0x20090000', mcu.x32(mcu.reg32(0x20090000, 0xabcdef12))) --写入0xabcdef12
+log.info('mod bit31 0x20090000', mcu.x32(mcu.reg32(0x20090000, 0x00000000, 0x80000000))) --修改bit31 为 0
+log.info('mod bit30 0x20090000', mcu.x32(mcu.reg32(0x20090000, 0x40000000, 0x40000000))) --修改bit30 为 1
+
+-- 用户代码已结束---------------------------------------------
+-- 结尾总是这一句
+sys.run()
+-- sys.run()之后后面不要加任何语句!!!!!

+ 17 - 0
luat/modules/luat_lib_mcu.c

@@ -112,6 +112,22 @@ static int l_mcu_reg32(lua_State* L) {
     return 1;
 }
 
+/*
+转换10进制数为16进制字符串输出
+@api mcu.x32(value)
+@int 需要转换的值
+@return string 16进制字符串
+@usage
+local value = mcu.x32(0x2009FFFC) --输出"0x2009fffc"
+*/
+static int l_mcu_x32(lua_State* L) {
+    uint32_t value = luaL_checkinteger(L, 1);
+    char c[16];
+    sprintf_(c, "0x%x", value);
+    lua_pushstring(L, c);
+    return 1;
+}
+
 #ifdef __LUATOS_TICK_64BIT__
 /*
 获取启动后的高精度tick,目前只有105能用
@@ -196,6 +212,7 @@ static const rotable_Reg_t reg_mcu[] =
     { "ticks",          ROREG_FUNC(l_mcu_ticks)},
     { "hz",             ROREG_FUNC(l_mcu_hz)},
 	{ "reg32",             ROREG_FUNC(l_mcu_reg32)},
+	{ "x32",             ROREG_FUNC(l_mcu_x32)},
 #ifdef __LUATOS_TICK_64BIT__
 	{ "tick64",			ROREG_FUNC(l_mcu_hw_tick64)},
 	{ "dtick64",		ROREG_FUNC(l_mcu_hw_diff_tick64)},