Compare commits

..
4 Commits
3 changed files with 15 additions and 14 deletions
+4 -4
View File
@@ -178,13 +178,13 @@ $(BUILD_DIR)/$(SUB_DIR_DEBUG): | $(BUILD_DIR)
# Release 最终可执行文件编译任务 # Release 最终可执行文件编译任务
$(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe: $(RELEASE_OBJECTS) $(BUILD_DIR)/$(SUB_DIR_RELEASE)/$(TARGET_FILE_NAME).exe: $(RELEASE_OBJECTS)
@echo ====== [Release] All File Compiled. Now Linking... ====== @echo ====== [Release] All File Compiled. Now Linking... ======
$(C++_COMPLIER) $(RELEASE_OBJECTS) -o $@ $(LIB_LINK) $(LDFLAGS) $(C++_COMPLIER) $(RELEASE_OBJECTS) -static -o $@ $(LIB_LINK) $(LDFLAGS)
@echo ====== [Release] Program Link Finished ====== @echo ====== [Release] Program Link Finished ======
# Debug 最终可执行文件编译任务 # Debug 最终可执行文件编译任务
$(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe: $(DEBUG_OBJECTS) $(BUILD_DIR)/$(SUB_DIR_DEBUG)/$(TARGET_FILE_NAME).exe: $(DEBUG_OBJECTS)
@echo ====== [Debug] All File Compiled. Now Linking... ====== @echo ====== [Debug] All File Compiled. Now Linking... ======
$(C++_COMPLIER) $(DEBUG_OBJECTS) -o $@ $(LIB_LINK) $(LDFLAGS) $(C++_COMPLIER) $(DEBUG_OBJECTS) -static -o $@ $(LIB_LINK) $(LDFLAGS)
@echo ====== [Debug] Program Link Finished ====== @echo ====== [Debug] Program Link Finished ======
# C Release 目标文件编译 # C Release 目标文件编译
@@ -219,5 +219,5 @@ $(BUILD_DIR)/$(SUB_DIR_DEBUG)/%.o: %.rc Makefile | $(BUILD_DIR)/$(SUB_DIR_DEBUG)
# 依赖关系 # 依赖关系
-include $(wildcard $(BUILD_DIR)/$(SUB_DIR_RELEASE)*.d) -include $(RELEASE_OBJECTS:.o=.d)
-include $(wildcard $(BUILD_DIR)/$(SUB_DIR_DEBUG)*.d) -include $(DEBUG_OBJECTS:.o=.d)
+7 -8
View File
@@ -14,7 +14,7 @@
工具支持结构体类型解析(内嵌结构体成员的结构体除外)、地址匹配、4字节地址对齐、常量宏定义识别、记录布局补全; 工具支持结构体类型解析(内嵌结构体成员的结构体除外)、地址匹配、4字节地址对齐、常量宏定义识别、记录布局补全;
## 如何使用 ## 如何使用
你可以在[Releases](/releases)处找到已经预构建好的可执行文件,也可以自行构建; 你可以在仓库的Release处找到已经预构建好的可执行文件,也可以自行构建;
工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中: 工具需要知道你要将哪些内容生成为标定量,哪些内容生成为观测量,为此你需要按照如下示例将特定的标记段插入原始代码中:
@@ -60,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
{ {
@@ -93,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)...
@@ -108,14 +108,13 @@ variable_type_enum solve_variable_type(const char *type_str)...
## 关于构建 ## 关于构建
本仓库所使用的构建平台及环境为如下: 本仓库所使用的构建平台及环境为如下:
OSWindows11 Professional 24H2 (26100.4652) 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) 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` 即可进行构建;
本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 `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;