第294行不会出现越界,设index=236,那么index+64=44,绝不是你想象的index=300。 |
看程序应是产生多相位正弦波的,0X8000和数组安位异或运算后给到DAC0和DAC1,用于转换数量 |
当 变量为 char 型时 0xff +0x01 = 0x00 , 0xff +0x02 = 0x01 , 0xf0 +0x12 = 0x02, 以此类推。 数组索引比较特别, 编译器不同,芯片硬件不同往往结果会不同,最好自己做个试验,然后Ctrl +F5 看一下实际效果,超出数组边界一般会有多个可能。 当:数组 Temp[] 为 code 时, 当你超出定义范围时,可能会 越界,即假定你定义 数组Temp[100], Temp2[100], 当你引用 Temp[101] 时会去引用 Temp2[0]; 当:数组 Temp[256] 为 pdata 时, 你引用 Temp[257] 他会回归引用 Temp[1]; 各种情况各种分析,无法一概而论,受编译器影响,也受芯片硬件影响,最终还是自己 Ctril + F5 比较可靠。 DAC1与0X8000 的 异或 我在你上个帖子已经说了,就不再重复了。你自己可以查看一下。 |
这个程序里不可能超过256,因为Index是一个 unsigned char类型的变量,它最大就是255。如果直接写COS_temp = SINE_TABLE[300],会出现错误,数组越界。看这个程序赋值语句它是把运算的值的低八位赋给Index。与0X8000异或最高位取反 |