完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我在第三方库中有一个函数,其中MSG必须对齐到2个字节。默认情况下,字符串文本对齐到1个字节。我希望所有字符串文字对齐到2字节,所以我不需要MeMcPy到一个对齐的缓冲区。是否有编译器设置?
以上来自于百度翻译 以下为原文 I have a function in a third party library void MqWrite(const char *msg, const int msg_length) where msg must be aligned to 2 bytes. String literals are aligned to 1 byte by default. I would like all string literals to be aligned to 2 bytes, so I do not need to memcpy to an aligned buffer. Is there a compiler setting for this? |
|
相关推荐
6个回答
|
|
不确定对齐方式……作为一个“最后的手段”,你可以创建一个联合数据类型(“WordByTeNeNoNoT”),其中一个元素是(u)因特16t。这样,当直接传递常量字符串到函数时,你会得到所需的对齐。
以上来自于百度翻译 以下为原文 Not sure about the alignment... As a "last resort" you could create a union data type ("WordByteUnion_t") where one element is a (u)int16_t. This way you would get the alignment required - - - exempt maybe when directly passing constant strings to the function. MqWrite("TEST", 4); // Uncontrolled alignment MqWrite((WordByteUnion_t*)"TEST", 4); // Not sure about the outcome :) |
|
|
|
您好,您可以使用:char MSG[]yAtIdTeTyx((对齐(2)))= {“这是一个测试rn”};参见XC16用户指南第8.11章变量属性。迈西尔
以上来自于百度翻译 以下为原文 Hi, You may use: char msg[] __attribute__ ((aligned (2))) = {"This is a test rn"}; See XC16 User's Guide chapter 8.11 Variable attributes. Mysil |
|
|
|
这是一种方式:const char * Gordt1951,Apple(2())=“Klatuu Barada Nikto”;
以上来自于百度翻译 以下为原文 This is one way: const char *Gort1951 __attribute__(( aligned(2) )) ="Klatuu Barada Nikto"; |
|
|
|
或:const char const *GORT1951α属性((对齐(2)))=“Klatuu Barada Nikto”;
以上来自于百度翻译 以下为原文 Or: const char const *Gort1951 __attribute__(( aligned(2) )) ="Klatuu Barada Nikto"; |
|
|
|
|
|
|
|
谢谢你的建议。我以前看过这个把戏,我试过了,效果不错。StAccOfFult.COM/A/36531529用未对齐的指针调用MQWrand导致软复位。在任何人忘记宏的情况下,可以使用MeMCPY安全地将错误处理到对齐的缓冲区。
以上来自于百度翻译 以下为原文 Thank you for all the suggestions. I have seen this trick before, I have tried it and it works. stackoverflow.com/a/36531529 Calling MqWrite with a pointer that is not aligned results in a soft reset. In case anyone forgets the macro the fault can be handled safely using memcpy to an aligned buffer. void SafeMqWrite(const char* str, const int len) { if ((uintptr_t )str & 1) { char *aligned_str; aligned_str = malloc(len); if (aligned_str) { memcpy(aligned_str, str, len); MqWrite(aligned_str, len); } } else { MqWrite(str, len); } } |
|
|
|
只有小组成员才能发言,加入小组>>
5237 浏览 9 评论
2026 浏览 8 评论
1950 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3201 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2253 浏览 5 评论
772浏览 1评论
662浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
590浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
672浏览 0评论
572浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 14:45 , Processed in 1.367424 second(s), Total 88, Slave 72 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号