熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2021-12-8 16:24
正文摘要:如圖:已知PHASE_ADD=566(上一張?zhí)佑羞@個(gè)完整的程序),當(dāng)Index+add時(shí),超過256怎么辦?它這個(gè)時(shí)怎么運(yùn)算的? 比如COS_temp = SINE_TABLE[300]時(shí)這時(shí)候已經(jīng)超過了數(shù)組的最大值,請(qǐng)問這個(gè)怎么算的? 后面D ... |
第294行不會(huì)出現(xiàn)越界,設(shè)index=236,那么index+64=44,絕不是你想象的index=300。 |
看程序應(yīng)是產(chǎn)生多相位正弦波的,0X8000和數(shù)組安位異或運(yùn)算后給到DAC0和DAC1,用于轉(zhuǎn)換數(shù)量 |
當(dāng) 變量為 char 型時(shí) 0xff +0x01 = 0x00 , 0xff +0x02 = 0x01 , 0xf0 +0x12 = 0x02, 以此類推。 數(shù)組索引比較特別, 編譯器不同,芯片硬件不同往往結(jié)果會(huì)不同,最好自己做個(gè)試驗(yàn),然后Ctrl +F5 看一下實(shí)際效果,超出數(shù)組邊界一般會(huì)有多個(gè)可能。 當(dāng):數(shù)組 Temp[] 為 code 時(shí), 當(dāng)你超出定義范圍時(shí),可能會(huì) 越界,即假定你定義 數(shù)組Temp[100], Temp2[100], 當(dāng)你引用 Temp[101] 時(shí)會(huì)去引用 Temp2[0]; 當(dāng):數(shù)組 Temp[256] 為 pdata 時(shí), 你引用 Temp[257] 他會(huì)回歸引用 Temp[1]; 各種情況各種分析,無法一概而論,受編譯器影響,也受芯片硬件影響,最終還是自己 Ctril + F5 比較可靠。 DAC1與0X8000 的 異或 我在你上個(gè)帖子已經(jīng)說了,就不再重復(fù)了。你自己可以查看一下。 |
這個(gè)程序里不可能超過256,因?yàn)镮ndex是一個(gè) unsigned char類型的變量,它最大就是255。如果直接寫COS_temp = SINE_TABLE[300],會(huì)出現(xiàn)錯(cuò)誤,數(shù)組越界。看這個(gè)程序賦值語句它是把運(yùn)算的值的低八位賦給Index。與0X8000異或最高位取反 |
Powered by 單片機(jī)教程網(wǎng)