久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2269|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

C語言const修飾的數(shù)組里的數(shù)據(jù)中斷調(diào)用全變成0了

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1004920 發(fā)表于 2023-4-4 16:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機:PIC18F45K80
編輯環(huán)境:MPLAB IDE V8.92
編譯器:XC8 V1.45
一個逆變器項目,輸出AC 0~15v 電壓連續(xù)可調(diào),用SPWM波來實現(xiàn),現(xiàn)在是產(chǎn)生SPWM波的數(shù)據(jù)放在一個數(shù)組里調(diào)用,為了省DATA空間用const修飾了,在主程序里調(diào)用沒事,但這個必須要放在中斷里去賦值調(diào)PWM。中斷里調(diào)用數(shù)組賦值全變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];這個數(shù)會變成0,如果數(shù)組不用const修飾就沒問題。(我用數(shù)碼管在中斷里調(diào)用顯示過,確實變成0了。)
有知道的大神么 為什么const修飾的數(shù)據(jù)放在中斷里使用就變成0了。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:146878 發(fā)表于 2023-4-4 17:22 | 只看該作者
首先看下中斷時間夠不夠,讀取ROM數(shù)據(jù)比RAM要慢的多。中斷里邊翻轉(zhuǎn)IO應(yīng)該就能看到。
然后進(jìn)入中斷后關(guān)閉總中斷試試。
回復(fù)

使用道具 舉報

板凳
ID:712493 發(fā)表于 2023-4-5 08:48 | 只看該作者
pdwdzz 發(fā)表于 2023-4-4 17:22
首先看下中斷時間夠不夠,讀取ROM數(shù)據(jù)比RAM要慢的多。中斷里邊翻轉(zhuǎn)IO應(yīng)該就能看到。
然后進(jìn)入中斷后關(guān)閉總 ...

中斷時間不夠,那放主程序為啥就夠?還是看看 加與不加 這段數(shù)據(jù)放在哪里?也就語法問題對否(或編譯器有啥特殊癖好跟你要實現(xiàn)的不一致),再看看這個PWM是否被其他函數(shù)操作了?
回復(fù)

使用道具 舉報

地板
ID:384109 發(fā)表于 2023-4-5 09:10 | 只看該作者
如果是常數(shù)的話,應(yīng)該是用code,不是const
回復(fù)

使用道具 舉報

5#
ID:844772 發(fā)表于 2023-4-5 17:17 來自觸屏版 | 只看該作者
Pic用const 好像是放到rom ,但應(yīng)該不是讀rom時間不夠,感覺是沒強制類轉(zhuǎn)換,pic是小端格式,跟51的是相反的,pwn是char型嗎?那正好賦零值
回復(fù)

使用道具 舉報

6#
ID:883242 發(fā)表于 2023-4-6 16:14 | 只看該作者
glinfei 發(fā)表于 2023-4-5 17:17
Pic用const 好像是放到rom ,但應(yīng)該不是讀rom時間不夠,感覺是沒強制類轉(zhuǎn)換,pic是小端格式,跟51的是相反 ...

這代碼跟大小端一點兒關(guān)系都沒有。
回復(fù)

使用道具 舉報

7#
ID:879348 發(fā)表于 2023-4-6 16:42 | 只看該作者
用pic單片機非常多坑,希望你能抗住,特別是大功率電路容易重啟,這單片機并沒有傳說中神奇,只是碰到高壓不容易壞而已
回復(fù)

使用道具 舉報

8#
ID:1004920 發(fā)表于 2023-4-6 16:48 | 只看該作者
glinfei 發(fā)表于 2023-4-5 17:17
Pic用const 好像是放到rom ,但應(yīng)該不是讀rom時間不夠,感覺是沒強制類轉(zhuǎn)換,pic是小端格式,跟51的是相反 ...

是int型數(shù)據(jù),我估計跟編譯器有關(guān)系,我本來想調(diào)壓全做成各種數(shù)組直接調(diào)用,但DATA不夠,就想const修飾了數(shù)組會放在ROM。我現(xiàn)在的解決辦法是數(shù)組不用const修飾,頻率提高到64MHz,然后弄個系數(shù)在中斷里直接計算SPWM數(shù)據(jù),我仿真調(diào)試了計算時間是21us,50HZ每HZ里50個脈寬調(diào)整量,時間上夠了。
回復(fù)

使用道具 舉報

9#
ID:1004920 發(fā)表于 2023-4-6 16:57 | 只看該作者
wufa1986 發(fā)表于 2023-4-6 16:42
用pic單片機非常多坑,希望你能抗住,特別是大功率電路容易重啟,這單片機并沒有傳說中神奇,只是碰到高壓 ...

是的 我用PIC18去驅(qū)動一款 小的OLED12864屏  由于有232通訊  所以要中斷,但是只要有中斷函數(shù)(哪怕函數(shù)里啥都不寫),屏幕就不顯示了,用16系列就沒事。也找不到原因后來改用了款ROM大點的16系列
回復(fù)

使用道具 舉報

10#
ID:844772 發(fā)表于 2023-4-7 22:48 來自觸屏版 | 只看該作者
zch5200 發(fā)表于 2023-4-6 16:48
是int型數(shù)據(jù),我估計跟編譯器有關(guān)系,我本來想調(diào)壓全做成各種數(shù)組直接調(diào)用,但DATA不夠,就想const修飾了 ...

看來沒猜對,不過就三個數(shù)超256,改成char型失真不大,會不會就行了?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产午夜在线 | 91精品国产91久久久久福利 | 久久久久国产精品一区 | 欧美电影免费观看 | 一区二区国产精品 | 黄网站在线观看 | 免费观看一级毛片 | 99久久久久久 | 日韩欧美在线观看 | 日韩中文字幕 | 亚洲三级视频 | 精品久久久一区 | 午夜视频一区二区 | 国产免费观看一区 | 久久里面有精品 | 精品国产91乱码一区二区三区 | 日韩成人av在线 | 色婷婷综合网 | 99reav| 久久久久国产精品免费免费搜索 | 日韩不卡视频在线观看 | 久久精品国产a三级三级三级 | 亚洲日日| 午夜免费视频 | 人人人艹 | 91中文字幕在线 | 亚洲人成人一区二区在线观看 | av乱码| 亚洲成人精品国产 | 国产一区二区视频免费在线观看 | 欧美综合一区二区 | 久久精品视频免费观看 | 欧美精品一区二区在线观看 | 一区二区在线不卡 | 午夜精品久久久久久久星辰影院 | 999www视频免费观看 | 亚洲精品自在在线观看 | 日日夜夜免费精品视频 | 国产h在线 | 国产精品三级 | 中文字幕在线一区 |