作者eleghost (eleghost)
看板C_and_CPP
标题[问题] __packed type 传递问题
时间Thu Apr 8 19:10:34 2021
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
Keil C
问题(Question):
我想要宣告一块连续记忆体, 利用__packed包住让两个阵列中间没有padding.
但当要对这块记忆体存取时, 或传递到 void* 变数时, 会发生error.
请问这个有法解决吗? thanks
错误结果(Wrong Output):
Error: argument of type "__packed int16_t *" is incompatible with
parameter of type "void *"
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
http://pastie.org/p/6IyFOaduXr98h7CzkumZeB
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.125.153.170 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1617880237.A.CDA.html
1F:推 CMJ0121: 你提供的 source code 我在 gcc 10.2.0 可以编的过 04/08 22:23
2F:→ CMJ0121: 不过要稍微修改成 recursive / callee(_Buf.buf1, NULL . 04/08 22:23
3F:→ Lipraxde: 你的 callee 的参数也改成 __packed 看看 04/08 22:27
但同时也需要兼容於 非__packed() 的
※ 编辑: eleghost (122.117.14.246 台湾), 04/08/2021 22:37:07
5F:→ Lipraxde: 大多数嵌入式晶片在存取 nonaligned 的东西时会变得很 04/08 22:42
6F:→ Lipraxde: 没效率,建议还是分两个版本吧。 04/08 22:42