欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言const修飾的數組里的數據中斷調用全變成0了 [打印本頁]

作者: zch5200    時間: 2023-4-4 16:54
標題: C語言const修飾的數組里的數據中斷調用全變成0了
單片機:PIC18F45K80
編輯環境:MPLAB IDE V8.92
編譯器:XC8 V1.45
一個逆變器項目,輸出AC 0~15v 電壓連續可調,用SPWM波來實現,現在是產生SPWM波的數據放在一個數組里調用,為了省DATA空間用const修飾了,在主程序里調用沒事,但這個必須要放在中斷里去賦值調PWM。中斷里調用數組賦值全變0了,把const去掉就好了。
const uint spwm_data[]=
{130,146,162,177,192,206,218,230,239,247,253,257,259,259,257,253,247,239,230,218,206,192,177,162,146,
130,113,97,82,67,53,41,29,20,12,6,2,0,0,2,6,12,20,29,41,53,67,82,97,113};

if(TMR0IF == 1)
{
                TMR0IF = 0;
                TMR0 = 57;               
                pwm = spwm_data[x];
                DC2B0 = pwm;
                DC2B1 = pwm>>1;
                CCPR2L = pwm>>2;               
                x++;if(x>=50){x=0;}
}

就是這句
pwm = spwm_data[x];這個數會變成0,如果數組不用const修飾就沒問題。(我用數碼管在中斷里調用顯示過,確實變成0了。)
有知道的大神么 為什么const修飾的數據放在中斷里使用就變成0了。

作者: pdwdzz    時間: 2023-4-4 17:22
首先看下中斷時間夠不夠,讀取ROM數據比RAM要慢的多。中斷里邊翻轉IO應該就能看到。
然后進入中斷后關閉總中斷試試。
作者: fj51hei    時間: 2023-4-5 08:48
pdwdzz 發表于 2023-4-4 17:22
首先看下中斷時間夠不夠,讀取ROM數據比RAM要慢的多。中斷里邊翻轉IO應該就能看到。
然后進入中斷后關閉總 ...

中斷時間不夠,那放主程序為啥就夠?還是看看 加與不加 這段數據放在哪里?也就語法問題對否(或編譯器有啥特殊癖好跟你要實現的不一致),再看看這個PWM是否被其他函數操作了?
作者: 人中狼    時間: 2023-4-5 09:10
如果是常數的話,應該是用code,不是const
作者: glinfei    時間: 2023-4-5 17:17
Pic用const 好像是放到rom ,但應該不是讀rom時間不夠,感覺是沒強制類轉換,pic是小端格式,跟51的是相反的,pwn是char型嗎?那正好賦零值
作者: Hephaestus    時間: 2023-4-6 16:14
glinfei 發表于 2023-4-5 17:17
Pic用const 好像是放到rom ,但應該不是讀rom時間不夠,感覺是沒強制類轉換,pic是小端格式,跟51的是相反 ...

這代碼跟大小端一點兒關系都沒有。
作者: wufa1986    時間: 2023-4-6 16:42
用pic單片機非常多坑,希望你能抗住,特別是大功率電路容易重啟,這單片機并沒有傳說中神奇,只是碰到高壓不容易壞而已
作者: zch5200    時間: 2023-4-6 16:48
glinfei 發表于 2023-4-5 17:17
Pic用const 好像是放到rom ,但應該不是讀rom時間不夠,感覺是沒強制類轉換,pic是小端格式,跟51的是相反 ...

是int型數據,我估計跟編譯器有關系,我本來想調壓全做成各種數組直接調用,但DATA不夠,就想const修飾了數組會放在ROM。我現在的解決辦法是數組不用const修飾,頻率提高到64MHz,然后弄個系數在中斷里直接計算SPWM數據,我仿真調試了計算時間是21us,50HZ每HZ里50個脈寬調整量,時間上夠了。
作者: zch5200    時間: 2023-4-6 16:57
wufa1986 發表于 2023-4-6 16:42
用pic單片機非常多坑,希望你能抗住,特別是大功率電路容易重啟,這單片機并沒有傳說中神奇,只是碰到高壓 ...

是的 我用PIC18去驅動一款 小的OLED12864屏  由于有232通訊  所以要中斷,但是只要有中斷函數(哪怕函數里啥都不寫),屏幕就不顯示了,用16系列就沒事。也找不到原因后來改用了款ROM大點的16系列
作者: glinfei    時間: 2023-4-7 22:48
zch5200 發表于 2023-4-6 16:48
是int型數據,我估計跟編譯器有關系,我本來想調壓全做成各種數組直接調用,但DATA不夠,就想const修飾了 ...

看來沒猜對,不過就三個數超256,改成char型失真不大,會不會就行了?




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1