Board logo

标题: 哪位大侠帮帮我?MCS08AW16强制类型转换的问题 [打印本页]

作者: jtyzas    时间: 2009-11-9 11:16     标题: 哪位大侠帮帮我?MCS08AW16强制类型转换的问题

I_ad = ( int16_t )( ATD_Value[0] - ATD_Value[1] );
I_ad是有signed Int,有符号16位
ATD_Value[x]是unsigned char,无符号8位
typedef  signed int
int16_t;

ATD_Value[0] - ATD_Value[1]的差值为0或-1,BDM观察强制转换的过程中0用-256表示,
-1用255表示,是代码的问题?还是编译器优化的问题?
附Codewarrior反汇编出的代码
LDA   ATD_Value:1
PSHA  
LDA   ATD_Value
TSX   
SUB   ,X
STA   ,X
CLRA  
SBC   #0
PSHA  
PULH  
PULX  
STHX  I_ad

求高手解答,不胜感激!
作者: fayefayehoo    时间: 2009-11-11 16:31

本帖最后由 fayefayehoo 于 2009-11-11 16:42 编辑

试试这样写
I_ad = (int16_t)ATD_Value[0] - (int16_t)ATD_Value[1];
作者: jtyzas    时间: 2009-11-12 09:21

试了,谢谢您!问题还是一样的




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0