找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1853|回復(fù): 5
收起左側(cè)

關(guān)于C語言邏輯運(yùn)算的問題

[復(fù)制鏈接]
ID:450037 發(fā)表于 2021-12-8 16:24 | 顯示全部樓層 |閱讀模式
1.PNG 捕獲.PNG
如圖:已知PHASE_ADD=566(上一張?zhí)佑羞@個完整的程序),當(dāng)Index+add時,超過256怎么辦?它這個時怎么運(yùn)算的?
比如COS_temp = SINE_TABLE[300]時這時候已經(jīng)超過了數(shù)組的最大值,請問這個怎么算的?
后面DAC0和DAC1與0X8000異或是什么作用?請高手指點一下
回復(fù)

使用道具 舉報

ID:160500 發(fā)表于 2021-12-8 20:13 | 顯示全部樓層
這個程序里不可能超過256,因為Index是一個 unsigned char類型的變量,它最大就是255。如果直接寫COS_temp = SINE_TABLE[300],會出現(xiàn)錯誤,數(shù)組越界?催@個程序賦值語句它是把運(yùn)算的值的低八位賦給Index。與0X8000異或最高位取反
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 2021-12-8 22:05 | 顯示全部樓層
當(dāng) 變量為 char 型時 0xff +0x01 = 0x00  ,  0xff +0x02 = 0x01  ,    0xf0 +0x12 = 0x02, 以此類推。

數(shù)組索引比較特別, 編譯器不同,芯片硬件不同往往結(jié)果會不同,最好自己做個試驗,然后Ctrl +F5 看一下實際效果,超出數(shù)組邊界一般會有多個可能。
當(dāng):數(shù)組  Temp[] 為 code 時, 當(dāng)你超出定義范圍時,可能會  越界,即假定你定義  數(shù)組Temp[100], Temp2[100], 當(dāng)你引用 Temp[101] 時會去引用 Temp2[0];
當(dāng):數(shù)組  Temp[256] 為 pdata 時, 你引用 Temp[257] 他會回歸引用 Temp[1];

各種情況各種分析,無法一概而論,受編譯器影響,也受芯片硬件影響,最終還是自己 Ctril + F5 比較可靠。

DAC1與0X8000 的 異或 我在你上個帖子已經(jīng)說了,就不再重復(fù)了。你自己可以查看一下。
回復(fù)

使用道具 舉報

ID:979299 發(fā)表于 2021-12-8 22:26 | 顯示全部樓層
看程序應(yīng)是產(chǎn)生多相位正弦波的,0X8000和數(shù)組安位異或運(yùn)算后給到DAC0和DAC1,用于轉(zhuǎn)換數(shù)量
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2021-12-9 01:28 | 顯示全部樓層
第294行不會出現(xiàn)越界,設(shè)index=236,那么index+64=44,絕不是你想象的index=300。
回復(fù)

使用道具 舉報

ID:450037 發(fā)表于 2021-12-9 09:57 | 顯示全部樓層
188610329 發(fā)表于 2021-12-8 22:05
當(dāng) 變量為 char 型時 0xff +0x01 = 0x00  ,  0xff +0x02 = 0x01  ,    0xf0 +0x12 = 0x02, 以此類推。

...

51hei圖片_20211209095631.jpg
翻轉(zhuǎn)是這樣的嗎?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表