| 目的将buf[0]取反后在crc8_table[]数组里查表 
 1,直接取反查表 buf[0]=crc8_table[~buf[0]],得到的数据是错误的。
 编译结果
 0020C E286      LDI R24,0x26
 0020D E090      LDI R25,0
 0020E 91E0 008D LDS R30,buf    //调用buf  视为16BIT了
 00210 27FF      CLR R31
 00211 95E0      COM R30            //取反
 00212 95F0      COM R31
 00213 0FE8      ADD R30,R24
 00214 1FF9      ADC R31,R25
 00215 9024      LPM R2,Z
 00216 9220 008D STS buf,R2
 ICC将buf[0]视为16位的了。如0X01取反将是0XFFFE,查出结果错误。
 
 2, 必须加上unsigned char声明,
 buf[0]=crc8_table[(uchar)~buf[0]]
 编译结果
 0020C E286      LDI R24,0x26
 0020D E090      LDI R25,0
 0020E 91E0 008D LDS R30,buf   //还是视为16BIT
 00210 27FF      CLR R31
 00211 95E0      COM R30
 00212 95F0      COM R31
 00213 27FF      CLR R31            //声明为uchar,清除高8bit
 00214 0FE8      ADD R30,R24
 00215 1FF9      ADC R31,R25
 00216 9024      LPM R2,Z
 00217 9220 008D STS buf,R2
 
 3, 用一个临时变量
 datatemp=~buf[0];
 buf[0]=crc8_table[datatemp];
 编译结果
 (0125)      datatemp=~buf[0];
 0020B 90A0 008D LDS R10,buf
 0020D 94A0      COM R10
 (0126)         buf[0]=crc8_table[datatemp];
 0020E E286      LDI R24,0x26
 0020F E090      LDI R25,0
 00210 2DEA      MOV R30,R10
 00211 27FF      CLR R31
 00212 0FE8      ADD R30,R24
 00213 1FF9      ADC R31,R25
 00214 9024      LPM R2,Z
 移来移去的。
 
 要怎么写才能直接认为是8bit取反,查表呀?
 就是希望这样的编译结果
 0020C E286      LDI R24,0x26
 0020D E090      LDI R25,0
 0020E 91E0 008D LDS R30,buf   //取buf[0]
 //    00210 27FF      CLR R31          不存在
 00211 95E0      COM R30           //取反
 //    00212 95F0      COM R31         不存在
 00213 27FF      CLR R31            //清除高8bit
 00214 0FE8      ADD R30,R24
 00215 1FF9      ADC R31,R25
 00216 9024      LPM R2,Z          //查表
 00217 9220 008D STS buf,R2
 |