Compare commits

...
7 Commits
8 changed files with 201 additions and 137 deletions
+1 -2
View File
@@ -11,8 +11,7 @@
"_UNICODE" "_UNICODE"
], ],
"cStandard": "c17", "cStandard": "c17",
"cppStandard": "c++17", "cppStandard": "c++17"
"intelliSenseMode": "windows-gcc-x64"
} }
], ],
"version": 4 "version": 4
+5 -6
View File
@@ -5,16 +5,15 @@
"name": "[SrcToA2L]构建并调试", "name": "[SrcToA2L]构建并调试",
"type": "cppdbg", "type": "cppdbg",
"request": "launch", "request": "launch",
"preLaunchTask": "project_build_task", // 预构建脚本 "preLaunchTask": "project_debug_build_task", // 预构建脚本
"program": "${workspaceFolder}\\Build\\SrcToA2L.exe", // 调试目标 "program": "${workspaceFolder}\\Build\\Debug\\SrcToA2L.exe", // 调试目标
"args": [ // 附加参数 "args": [ // 附加参数
".\\Test\\typedef.h", ".\\Test\\typedef.h",
".\\Inc\\Type_Descriptions.hpp", ".\\Test\\source_code.c",
".\\Test\\input.c",
"-r", "-r",
".\\Test\\PVER.a2l", ".\\Test\\Minimal_A2L.a2l",
"-m", "-m",
".\\Test\\PVER.map", ".\\Test\\test_map.map",
], ],
"stopAtEntry": false, "stopAtEntry": false,
"cwd": "${workspaceFolder}", // 工作目录 "cwd": "${workspaceFolder}", // 工作目录
+4 -3
View File
@@ -1,14 +1,15 @@
{ {
"tasks": [ "tasks": [
{ {
"label": "project_build_task", //定义的Task标签 "label": "project_debug_build_task", //定义的Task标签
"type": "shell", //Task执行的类型 "type": "shell", //Task执行的类型
"options": { "options": {
"cwd": "${workspaceFolder}" // 工作目录 "cwd": "${workspaceFolder}" // 工作目录
}, },
"command": "make", //运行的命令 "command": "make", //运行的命令
"args": [ "args": [ // 附加参数
"-j4" // 附加参数 "debug",
"-j4"
], ],
} }
], ],
+171 -109
View File
@@ -1,161 +1,223 @@
# 目标文件名称 # 目标文件名称
TARGET_FILE_NAME = SrcToA2L TARGET_FILE_NAME = SrcToA2L
# 编译路径 # 编译目录
BUILD_DIR = Build BUILD_DIR = Build
# 工具链前缀 # Release 编译子目录
PREFIX = \ SUB_DIR_RELEASE = Release
# 调试选项 # Debug 编译子目录
DEBUG = 1 SUB_DIR_DEBUG = Debug
# GUI或CUI编译选项 # Release 优化等级
RELEASE_OPT = -Os
# Debug 优化等级
DEBUG_OPT = -O0
# GUI或CUI编译选项 [0]CUI/Console [1]GUI
GUI = 0 GUI = 0
# C编译标准,等号后面不能有空格 # C编译标准
C_STD =c17 C_STD = c17
# C++编译标准,等号后面不能有空格 # C++编译标准
CXX_STD =c++17 CXX_STD = c++17
#输入源文件字符编码定义,等号后不能有空格 # 源文件编码定义
INPUT_CHAR_CODING =UTF-8 INPUT_CHAR_ENCODING = UTF-8
#输出单字节字符编码定义,等号后不能有空格 # 编译产物单字节字符(char)编码定义
OUTPUT_CHAR_CODING =GBK OUTPUT_CHAR_ENCODING = GBK
#输出宽字符编码定义,等号后不能有空格 # 编译产物宽字符(wchar_t)编码定义
OUTPUT_WCHAR_CODING =UTF-16LE OUTPUT_WCHAR_ENCODING = UTF-16LE
# 优化等级 # 编译工具前缀
OPT = -Og COMPLIER_PREFIX = \
# C编译工具 # C编译工具
CC = $(PREFIX)gcc C_COMPLIER = $(strip $(COMPLIER_PREFIX))gcc
# C++编译工具 # C++编译工具
CXX = $(PREFIX)g++ C++_COMPLIER = $(strip $(COMPLIER_PREFIX))g++
# Win32 资源文件编译工具 # Windows 资源文件编译工具
WIN32_RES = windres WIN_RES_COMPLIER = windres
##################################################################################
# 链接库 # 链接库
LIB_LINK = \ LIB_LINK = \
# C定义 # C定义
C_DEFS = \ C_DEFS = \
-D_UNICODE \ _UNICODE \
-DUNICODE UNICODE \
# C头文件目录 # C头文件目录
C_INCLUDES = \ C_INCLUDES_PATHS = \
# C源文件 # C源文件目录
C_SOURCES = \ C_SOURCES_PATHS = \
# C额外单个源文件
C_EXTERA_SOURCES = \
# C++定义 # C++定义
CXX_DEFS = \ CXX_DEFS = \
_UNICODE \
UNICODE \
# C++ 头文件目录 # C++ 头文件目录
CXX_INCLUDES = \ CXX_INCLUDES_PATHS = \
-IInc \ Inc \
# C++源文件 # C++源文件目录
CXX_SOURCES = \ CXX_SOURCES_PATHS = \
Src/Main.cpp \ Src \
Src/Tool_Functions.cpp \
Src/Core_Functions.cpp \
Src/Global_Variables.cpp \
# 源文件 # C++额外单个源文件
WIN32_RES_LISTS = \ CXX_EXTERA_SOURCES = \
# Windows 资源文件脚本头文件路径
WIN_RESOURCE_INCLUDES_PATHS = \
# Windows 资源文件脚本列表
WIN_RESOURCE_SCRIPTS = \
##################################################################################
# C编译选项 # C编译选项
CFLAGS = $(C_DEFS) $(C_INCLUDES) $(OPT) -std=$(C_STD) \ CFLAGS = $(foreach text,$(C_DEFS),$(addprefix -D,$(text))) \
-finput-charset=$(INPUT_CHAR_CODING) \ $(foreach path,$(C_INCLUDES_PATHS),$(addprefix -I,$(path))) \
-fexec-charset=$(OUTPUT_CHAR_CODING) \ -std=$(strip $(C_STD)) \
-fwide-exec-charset=$(OUTPUT_WCHAR_CODING) \ -finput-charset=$(strip $(INPUT_CHAR_ENCODING)) \
-static \ -fexec-charset=$(strip $(OUTPUT_CHAR_ENCODING)) \
-Wall \ -fwide-exec-charset=$(strip $(OUTPUT_WCHAR_ENCODING)) \
-static \
# 生成依赖相关信息 -Wall \
CFLAGS += -MMD -MP -MF"$(@:%.o=%.d)" -MMD -MP -MF"$(@:%.o=%.d)" \
# 调试选项
ifeq ($(DEBUG), 1)
CFLAGS += -g
endif
# GUI与CUI选项
ifeq ($(GUI), 1)
CFLAGS += -mwindows
else
CFLAGS += -mconsole
endif
# C++编译选项 # C++编译选项
CXXFLAGS = -lstdc++ $(CFLAGS:$(C_STD)=$(CXX_STD)) $(CXX_DEFS) $(CXX_INCLUDES) CXXFLAGS = $(foreach text,$(CXX_DEFS),$(addprefix -D,$(text))) \
$(foreach path,$(CXX_INCLUDES_PATHS),$(addprefix -I,$(path))) \
-std=$(strip $(CXX_STD)) \
-finput-charset=$(strip $(INPUT_CHAR_ENCODING)) \
-fexec-charset=$(strip $(OUTPUT_CHAR_ENCODING)) \
-fwide-exec-charset=$(strip $(OUTPUT_WCHAR_ENCODING)) \
-static \
-Wall \
-MMD -MP -MF"$(@:%.o=%.d)" \
-lstdc++ \
# 链接选项 # 链接选项
LDFLAGS = -Wl,-Map,$(BUILD_DIR)/$(TARGET_FILE_NAME).map LDFLAGS = -Wl,-Map,$(basename $@).map \
# C目标文件目录关联 ##################################################################################
OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
vpath %.c $(sort $(dir $(C_SOURCES)))
# C++目标文件目录关联 # GUI与CUI选项附加
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CXX_SOURCES:.cpp=.o))) ifeq ($(GUI), 1)
vpath %.cpp $(sort $(dir $(CXX_SOURCES))) LDFLAGS += -mwindows
else
LDFLAGS += -mconsole
endif
# 资源文件目录关联 # C目标文件及索引目录关联
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(WIN32_RES_LISTS:.rc=.o))) OBJECTS = $(notdir $(C_EXTERA_SOURCES:.c=.o))
vpath %.rc $(sort $(dir $(WIN32_RES_LISTS))) OBJECTS += $(subst .c,.o,$(notdir $(foreach path,$(C_SOURCES_PATHS),$(wildcard $(path)/*.c))))
vpath %.c $(sort $(dir $(C_EXTERA_SOURCES))) $(sort $(C_SOURCES_PATHS))
# Make编译任务 # C++目标文件及索引目录关联
all: $(BUILD_DIR)/$(TARGET_FILE_NAME).exe OBJECTS += $(notdir $(CXX_EXTERA_SOURCES:.cpp=.o))
OBJECTS += $(subst .cpp,.o,$(notdir $(foreach path,$(CXX_SOURCES_PATHS),$(wildcard $(path)/*.cpp))))
vpath %.cpp $(sort $(dir $(CXX_EXTERA_SOURCES))) $(sort $(CXX_SOURCES_PATHS))
# C目标文件编译 # Windows资源文件及索引目录关联
$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR) OBJECTS += $(notdir $(WIN_RESOURCE_SCRIPTS:.rc=.o))
@echo ====== C Source File "$<" Compiling... ====== vpath %.rc $(sort $(dir $(WIN_RESOURCE_SCRIPTS)))
$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
# C++ 目标文件编译编译
$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
@echo ====== C++ Source File "$<" Compiling... ======
$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
# 资源文件编译编译 # Release 目标文件
$(BUILD_DIR)/%.o: %.rc Makefile | $(BUILD_DIR) RELEASE_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_RELEASE)/,$(OBJECTS))
@echo ====== Win32 Resources File "$<" Compiling... ======
$(WIN32_RES) $< -o $@
# 生成可执行文件 # Debug 目标文件
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe: $(OBJECTS) Makefile DEBUG_OBJECTS = $(addprefix $(BUILD_DIR)/$(SUB_DIR_DEBUG)/,$(OBJECTS))
@echo ====== All File Compiled. Now Linking... ======
$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $@ $(LIB_LINK)
@echo ====== Program Link Finished ======
# 生成编译目录 ##################################################################################
# all任务 目标为 release 和 debug 产物
all: $(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe $(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe
@echo ====== [All] Build Procedure Accomplished ======
# release任务 目标为 release 产物
release: $(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe
@echo ====== [Release] Build Procedure Accomplished ======
# debug任务 目标为 debug 产物
debug: $(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe
@echo ====== [Debug] Build Procedure Accomplished ======
# 清理任务
clean: $(BUILD_DIR)
powershell rm -r $(BUILD_DIR)
# 构建目录生成
$(BUILD_DIR): $(BUILD_DIR):
mkdir $@ powershell mkdir $@
# 清除任务 # Release 工作目录生成
clean:$(BUILD_DIR) $(BUILD_DIR)/$(SUB_DIR_RELEASE): | $(BUILD_DIR)
powershell rm -r $(BUILD_DIR) powershell mkdir $@
# 运行任务 # Debug 工作目录生成
run:all $(BUILD_DIR)/$(SUB_DIR_DEBUG): | $(BUILD_DIR)
$(BUILD_DIR)/$(TARGET_FILE_NAME).exe powershell mkdir $@
# Release 最终可执行文件编译任务
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe: $(RELEASE_OBJECTS)
@echo ====== [Release] All File Compiled. Now Linking... ======
$(C++_COMPLIER) $(RELEASE_OBJECTS) -static -o $@ $(LIB_LINK) $(LDFLAGS)
@echo ====== [Release] Program Link Finished ======
# Debug 最终可执行文件编译任务
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe: $(DEBUG_OBJECTS)
@echo ====== [Debug] All File Compiled. Now Linking... ======
$(C++_COMPLIER) $(DEBUG_OBJECTS) -static -o $@ $(LIB_LINK) $(LDFLAGS)
@echo ====== [Debug] Program Link Finished ======
# C Release 目标文件编译
$(BUILD_DIR)/$(SUB_DIR_RELEASE)%.o: %.c Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
@echo ====== [Release] C Source File "$<" Compiling... ======
$(C_COMPLIER) -c $(CFLAGS) $(RELEASE_OPT) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(notdir $(<:.c=.lst)) $< -o $@
# C++ Release 目标文件编译
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/%.o: %.cpp Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
@echo ====== [Release] C++ Source File "$<" Compiling... ======
$(C++_COMPLIER) -c $(CXXFLAGS) $(RELEASE_OPT) -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(notdir $(<:.cpp=.lst)) $< -o $@
# Release 资源脚本文件编译
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/%.o: %.rc Makefile | $(BUILD_DIR)/$(SUB_DIR_RELEASE)
@echo ====== [Release] Windows Resource Script File "$<" Compiling... ======
$(WIN_RES_COMPLIER) $(foreach path,$(WIN_RESOURCE_INCLUDES_PATHS),$(addprefix -I,$(path))) $< -o $@
# C Debug 目标文件编译
$(BUILD_DIR)/$(SUB_DIR_DEBUG)%.o: %.c Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
@echo ====== [Debug] C Source File "$<" Compiling... ======
$(C_COMPLIER) -c $(CFLAGS) $(DEBUG_OPT) -g -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(notdir $(<:.c=.lst)) $< -o $@
# C++ Debug 目标文件编译
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.cpp Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
@echo ====== [Debug] C++ Source File "$<" Compiling... ======
$(C++_COMPLIER) -c $(CXXFLAGS) $(DEBUG_OPT) -g -Wa,-a,-ad,-ahlms=$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(notdir $(<:.cpp=.lst)) $< -o $@
# Debug 资源脚本文件编译
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.rc Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
@echo ====== [Debug] Windows Resource Script File "$<" Compiling... ======
$(WIN_RES_COMPLIER) $(foreach path,$(WIN_RESOURCE_INCLUDES_PATHS),$(addprefix -I,$(path))) $< -o $@
# 发行编译
release:$(BUILD_DIR) $(RELEASE_DIR)
powershell rm -r $(BUILD_DIR)
make DEBUG=0
powershell rm $(BUILD_DIR)/*.o
powershell rm $(BUILD_DIR)/*.d
powershell rm $(BUILD_DIR)/*.lst
powershell rm $(BUILD_DIR)/*.map
# 依赖关系 # 依赖关系
-include $(wildcard $(BUILD_DIR)/*.d) -include $(RELEASE_OBJECTS:.o=.d)
-include $(DEBUG_OBJECTS:.o=.d)
+13 -10
View File
@@ -13,7 +13,10 @@
工具支持结构体类型解析(内嵌结构体成员的结构体除外)、地址匹配、4字节地址对齐、常量宏定义识别、记录布局补全; 工具支持结构体类型解析(内嵌结构体成员的结构体除外)、地址匹配、4字节地址对齐、常量宏定义识别、记录布局补全;
## 如何使用 ## 如何使用
首先需要进行一些准备,工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中:
你可以在仓库的Release处找到已经预构建好的可执行文件,也可以自行构建;
工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中:
```c ```c
// .\Test\source_code.c // .\Test\source_code.c
@@ -57,20 +60,20 @@ SrcToA2L.exe .\Test\typedef.h .\Test\source_code.c
- `-r` 指定为合并写入的参考A2L文件; - `-r` 指定为合并写入的参考A2L文件;
- `-m` 指定为用于查找地址的map文件; - `-m` 指定为用于查找地址的map文件;
- `-a` 指定字节对齐长度(仅非0数值且为2的正整次幂),不指定或参数错误时默认为4字节对齐; - `-a` 指定字节对齐长度(仅为1或2的正整次幂),不指定或参数错误时默认为4字节对齐;
其它传入的参数视为用于解析的源文件、头文件,A2L与map文件仅传入的最后一个有效; 其它传入的参数视为用于解析的源文件、头文件,A2L与map文件仅传入的最后一个有效;
**`SrcToA2L` 不会破坏任何用于输入的文件,仅以只读模式打开**; **`SrcToA2L` 不会破坏任何用于输入的文件,仅以只读模式打开**;
## 注意事项 ## 注意事项
本工具为了省略多余操作,除需特定处理的 `calibrations``measurements` 标记段外,结构体、宏定义、地址匹配等的解析识别是通过全文扫描提取关键字进行的,由于代码风格千奇百怪,解析处理过程有可能会遇到预料之外的BUG(尤其是在生产环境下),为避免发生此类情况发生,最好事先将用于处理的代码进行格式化,或特别留意 `define``typedef` 等关键字周边的情况; 本工具为了省略多余操作,除需特定处理的 `calibrations``measurements` 标记段外,结构体、宏定义、地址匹配等的解析识别是通过全文扫描提取关键字进行的,由于代码风格千奇百怪,解析处理过程有可能会遇到预料之外的BUG(尤其是在生产环境下),为避免发生此类情况发生,**最好事先将用于处理的代码进行格式化**,或特别留意 `define``typedef` 等关键字周边的情况;
如有意外情况发生,可以参考终端日志查看问题发生位置以修改输入文件,或对本工具源码进行修改,构建适应特定环境的版本; 如有意外情况发生,可以参考终端日志查看问题发生位置以修改输入文件,或对本工具源码进行修改,构建适应特定环境的版本;
此外,由于嵌入式平台对类型长度敏感,**本工具仅支持部分`stdint.h`中字节长度固定的标准类型,并将部分常用类型解析为固定长度**,如下所示: 此外,由于嵌入式平台对类型长度敏感,**本工具仅支持部分`stdint.h`中字节长度固定的标准类型,并将部分常用类型解析为固定长度**,如下所示:
```c++ ```c++
// Src/Tool_Functions.cpp // .\Inc\Type_Descriptions.hpp
typedef enum typedef enum
{ {
@@ -90,7 +93,7 @@ typedef enum
类型匹配详情可以在以下函数中查看,你也可以修改这个函数以支持更多的类型: 类型匹配详情可以在以下函数中查看,你也可以修改这个函数以支持更多的类型:
```c++ ```c++
// Src/Tool_Functions.cpp // .\Src\Tool_Functions.cpp
// 解析变量类型 // 解析变量类型
variable_type_enum solve_variable_type(const char *type_str)... variable_type_enum solve_variable_type(const char *type_str)...
@@ -103,15 +106,15 @@ variable_type_enum solve_variable_type(const char *type_str)...
#define VALUE_3 VALUE_1 // X #define VALUE_3 VALUE_1 // X
``` ```
## 关于构建 ## 关于构建
本仓库所使用的构建环境为: 本仓库所使用的构建平台及环境为如下:
[mingw-w64\i686-14.2.0-release-win32-dwarf-ucrt-rt_v12-rev2](https://github.com/niXman/mingw-builds-binaries/releases/tag/14.2.0-rt_v12-rev2) OSWindows11 Professional 24H2 (26100.4652)
Tool Chain[mingw-w64\i686-14.2.0-release-win32-dwarf-ucrt-rt_v12-rev2](https://github.com/niXman/mingw-builds-binaries/releases/tag/14.2.0-rt_v12-rev2)
构建关系由 `Makefile` 组织,使用 `C17`、`C++17` 标准,但由于并未使用高级特性,构建标准可自行调整(按理说 `C98`、`C++98` 应该也行); 构建关系由 `Makefile` 组织,使用 `C17`、`C++17` 标准,但由于并未使用高级特性,构建标准可自行调整(按理说 `C98`、`C++98` 应该也行);
完善构建环境后,在工作目录下使用 `make`、`mingw32-make` 即可进行构建; 完善构建环境后,在工作目录下使用 `make`、`mingw32-make` 即可进行构建;
**Linux环境下也可以进行构建,但需要对 `Makefile` 进行少量修改** 本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 `Makefile` 进行少量修改
目前已知使用64位或某些分发版本的编译器时会出现 `size_t` 类型不统一导致的编译警告,但不影响主要功能;
## 主要目录及说明 ## 主要目录及说明
Git-Storage 本仓库目录 Git-Storage 本仓库目录
├─.vscode 用于vscode的配置文件 ├─.vscode 用于vscode的配置文件
+3 -1
View File
@@ -36,7 +36,9 @@ void solve_args(int argc, char *argv[])
size_t value = 0; size_t value = 0;
sscanf(argv[count + 1], "%u", &value); sscanf(argv[count + 1], "%u", &value);
if ((value % 2 == 0 && value != 0) || value == 1)
// 利用2进制中2的整次幂仅有1位为1判定是否为合法字节对齐
if ((value & (value - 1)) == 0 && value != 0)
{ {
log_printf(LOG_SUCCESS, "Alignment size set to %u.", value); log_printf(LOG_SUCCESS, "Alignment size set to %u.", value);
addr_alignment_size = value; addr_alignment_size = value;
+2 -2
View File
@@ -14,10 +14,10 @@ extern "C"
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
printf("\n\n"); printf("\n\n");
log_printf(LOG_SYS_INFO, "SrcToA2L Ver1.4"); log_printf(LOG_SYS_INFO, "SrcToA2L Ver1.5");
log_printf(LOG_SYS_INFO, "Auther: LuChiChick"); log_printf(LOG_SYS_INFO, "Auther: LuChiChick");
log_printf(LOG_SYS_INFO, "%s\n%s\n%s\n\n", "Open source links:", log_printf(LOG_SYS_INFO, "%s\n%s\n%s\n\n", "Open source links:",
" ├─Github: https://git.luchichick.cn/LuChiChick/SrcToA2L", " ├─Github: https://github.com/LuChiChick/SrcToA2L",
" └─Personal Git System: https://git.luchichick.cn/LuChiChick/SrcToA2L"); " └─Personal Git System: https://git.luchichick.cn/LuChiChick/SrcToA2L");
log_printf(LOG_SYS_INFO, "Start argument solve.\n\n"); log_printf(LOG_SYS_INFO, "Start argument solve.\n\n");
+2 -4
View File
@@ -367,8 +367,6 @@ variable_info solve_variable_info(const char *code_line_str)
info.element_count = info.element_count * 10 + buff[n] - '0'; info.element_count = info.element_count * 10 + buff[n] - '0';
else else
{ {
// 处理宏定义常量,暂时将不支持的量定义为1
// 提取宏字符串 // 提取宏字符串
char define_str[VARIABLE_NAME_STR_LENGTH_MAX] = {'\0'}; char define_str[VARIABLE_NAME_STR_LENGTH_MAX] = {'\0'};
for (int count = 0; count < VARIABLE_NAME_STR_LENGTH_MAX; count++) for (int count = 0; count < VARIABLE_NAME_STR_LENGTH_MAX; count++)
@@ -389,7 +387,7 @@ variable_info solve_variable_info(const char *code_line_str)
} }
target_define_node = target_define_node->p_next; target_define_node = target_define_node->p_next;
} }
// 遍历完成但没有找到 // 遍历完成但没有找到,元素长度设置为0
if (target_define_node == nullptr) if (target_define_node == nullptr)
{ {
// printf("\n"); // printf("\n");
@@ -404,7 +402,7 @@ variable_info solve_variable_info(const char *code_line_str)
break; break;
} }
if (buff[count] == ' ' || buff[count] == '=' || buff[count] == ';') // 是单个变量 if (buff[count] == '\0' || buff[count] == '=' || buff[count] == ';') // 是单个变量
{ {
info.element_count = 1; info.element_count = 1;
break; break;