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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2154|回復: 9
打印 上一主題 下一主題
收起左側

C語言const修飾的數組里的數據中斷調用全變成0了

[復制鏈接]
跳轉到指定樓層
樓主
ID:1004920 發表于 2023-4-4 16:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機: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了。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

地板
ID:384109 發表于 2023-4-5 09:10 | 只看該作者
如果是常數的話,應該是用code,不是const
回復

使用道具 舉報

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

使用道具 舉報

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

這代碼跟大小端一點兒關系都沒有。
回復

使用道具 舉報

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

使用道具 舉報

8#
ID:1004920 發表于 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個脈寬調整量,時間上夠了。
回復

使用道具 舉報

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

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

使用道具 舉報

10#
ID:844772 發表于 2023-4-7 22:48 來自手機 | 只看該作者
zch5200 發表于 2023-4-6 16:48
是int型數據,我估計跟編譯器有關系,我本來想調壓全做成各種數組直接調用,但DATA不夠,就想const修飾了 ...

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产二区 | 欧美 日韩 中文 | 中文字幕亚洲在线 | 亚州av在线 | 久久久天天| 在线播放一区 | 日本在线视频一区二区 | 国产一区免费视频 | 爱高潮www亚洲精品 中文字幕免费视频 | 欧美视频三区 | 国产欧美久久精品 | 欧美爱爱视频 | 一区二区三区视频播放 | 久久精品91 | 自拍中文字幕 | 午夜欧美| 日韩成人在线电影 | 一级在线毛片 | 久久久www成人免费无遮挡大片 | 99在线免费观看视频 | 亚洲一区视频在线 | 人人玩人人添人人澡欧美 | 国产精品3区 | 国产一区二区在线视频 | 欧美亚洲免费 | 精品免费视频 | 欧美黑人激情 | 午夜免费电影院 | 99热国产在线播放 | 亚洲综合无码一区二区 | 久草福利 | 在线播放一区二区三区 | 亚洲午夜精品在线观看 | 成人av网站在线观看 | 久久久成人免费一区二区 | 精品在线播放 | 日本在线视频一区二区 | 美女视频一区 | 国产激情在线播放 | 国产成人亚洲精品自产在线 | 欧美精品一区二区三区在线播放 |