Dozingfiretruck 4 лет назад
Родитель
Сommit
4888ce3889
2 измененных файлов с 8 добавлено и 10 удалено
  1. 8 3
      components/i2c-tools/i2c_tools.c
  2. 0 7
      components/i2c-tools/i2c_utils.h

+ 8 - 3
components/i2c-tools/i2c_tools.c

@@ -1,9 +1,12 @@
 #include "i2c_utils.h"
+#include "luat_malloc.h"
+
 #define LUAT_LOG_TAG "i2c tools"
 #include "luat_log.h"
 
-static char i2c_tools_data[I2C_TOOLS_BUFFER_SIZE] = {0};
 void i2c_tools(const char * data,size_t len){
+    char *i2c_tools_data = (char *)luat_heap_malloc(len-8);
+    memset(i2c_tools_data, 0, len-8); // 确保填充为0
     memcpy(i2c_tools_data, data+9, len-9); 
     char *command = strtok(i2c_tools_data, " ");
     if (memcmp("send", command, 4) == 0){
@@ -20,10 +23,9 @@ void i2c_tools(const char * data,size_t len){
             len++;
         }
         if(i2c_write(address, send_buff, len)!=1){
-            LLOGI("[i2c] write to %s failed", address);
+            LLOGI("[i2c] write to 0x%02X failed", address);
         }
     }else if(memcmp("recv",command,4) == 0){
-        uint8_t buffer[I2C_TOOLS_BUFFER_SIZE] = {0};
         int i2c_id = atoi(strtok(NULL, " "));
         i2c_init(i2c_id);
         uint8_t address = strtonum(strtok(NULL, " "));
@@ -31,6 +33,8 @@ void i2c_tools(const char * data,size_t len){
         uint8_t len = atoi(strtok(NULL, " "));
         if (len == 0)
             len == 1;
+        uint8_t *buffer = (uint8_t *)luat_heap_malloc(len);
+        memset(buffer, 0, len); // 确保填充为0
         if( i2c_read(address, reg,buffer,len)!=1){
             printf("[ ");
             for(uint8_t i = 0; i < len; i++){
@@ -48,4 +52,5 @@ void i2c_tools(const char * data,size_t len){
     }else{
         i2c_help();
     }
+    luat_heap_free(i2c_tools_data);
 }

+ 0 - 7
components/i2c-tools/i2c_utils.h

@@ -6,13 +6,6 @@
 
 #define I2C_TOOLS_BUFFER_SIZE 64
 
-#define ARG_CMD_POS             1
-
-#define ARG_BUS_NAME_POS    2
-#define ARG_ADDR_POS        3
-#define ARG_DATA_POS        4
-#define ARG_READ_MAX        6
-
 uint8_t strtonum(const char* str);
 
 void i2c_help(void);