diff --git a/README.md b/README.md index 4164a19..d501f82 100644 --- a/README.md +++ b/README.md @@ -60,14 +60,14 @@ SrcToA2L.exe .\Test\typedef.h .\Test\source_code.c - `-r` 指定为合并写入的参考A2L文件; - `-m` 指定为用于查找地址的map文件; -- `-a` 指定字节对齐长度(仅非0数值且为2的正整次幂),不指定或参数错误时默认为4字节对齐; +- `-a` 指定字节对齐长度(仅为1或2的正整次幂),不指定或参数错误时默认为4字节对齐; 其它传入的参数视为用于解析的源文件、头文件,A2L与map文件仅传入的最后一个有效; **`SrcToA2L` 不会破坏任何用于输入的文件,仅以只读模式打开**; ## 注意事项 -本工具为了省略多余操作,除需特定处理的 `calibrations` 与 `measurements` 标记段外,结构体、宏定义、地址匹配等的解析识别是通过全文扫描提取关键字进行的,由于代码风格千奇百怪,解析处理过程有可能会遇到预料之外的BUG(尤其是在生产环境下),为避免发生此类情况发生,最好事先将用于处理的代码进行格式化,或特别留意 `define`、`typedef` 等关键字周边的情况; +本工具为了省略多余操作,除需特定处理的 `calibrations` 与 `measurements` 标记段外,结构体、宏定义、地址匹配等的解析识别是通过全文扫描提取关键字进行的,由于代码风格千奇百怪,解析处理过程有可能会遇到预料之外的BUG(尤其是在生产环境下),为避免发生此类情况发生,**最好事先将用于处理的代码进行格式化**,或特别留意 `define`、`typedef` 等关键字周边的情况; 如有意外情况发生,可以参考终端日志查看问题发生位置以修改输入文件,或对本工具源码进行修改,构建适应特定环境的版本; @@ -111,11 +111,10 @@ OS:Windows11 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` 应该也行); - 完善构建环境后,在工作目录下使用 `make`、`mingw32-make` 即可进行构建; -本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 `Makefile` 进行少量修改; - +本工具仅使用标准库,完全具备跨平台支持,但在其他平台、环境下需要对 `Makefile` 进行少量修改; +目前已知使用64位或某些分发版本的编译器时会出现 `size_t` 类型不统一导致的编译警告,但不影响主要功能; ## 主要目录及说明 Git-Storage 本仓库目录 ├─.vscode 用于vscode的配置文件 diff --git a/Src/Core_Functions.cpp b/Src/Core_Functions.cpp index 8dd1219..6a19ca1 100644 --- a/Src/Core_Functions.cpp +++ b/Src/Core_Functions.cpp @@ -36,7 +36,9 @@ void solve_args(int argc, char *argv[]) size_t value = 0; 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); addr_alignment_size = value;