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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于C語言重入函數

[復制鏈接]
跳轉到指定樓層
樓主
ID:847202 發表于 2021-1-11 20:24 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序編譯的時候出現警告,經過查資料后發現是有一個子函數,被主函數和中斷都調用了,所以出現了警告。請問那個重入函數怎么寫?求指導
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:57657 發表于 2021-1-11 23:04 | 只看該作者
主函數正在調用該函數且未返回,再被中斷搶占就會造成內存錯亂。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:373388 發表于 2021-1-11 23:25 | 只看該作者
本帖最后由 xhaity 于 2021-1-11 23:28 編輯

一般情況下,中斷和主函數不調用同一函數,一定要調用的話,那就用鎖標志,主函數正在執行某部分時,做鎖標記,沒執行完,在中斷調用查該標志,如果有鎖,跳過該程序段。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:373388 發表于 2021-1-11 23:31 | 只看該作者
一般情況下,中斷和主函數不調用同一函數,一定要調用的話,那就用鎖標志,主函數正在執行某部分時,做鎖標志,執行完清除;中斷中查詢該標志,如果該標志存在,就跳過該段。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:876745 發表于 2021-1-12 14:19 | 只看該作者
一般情況下,別在中斷調子函數,留個標志就可以了,比如累加。再根據標志寫函數。
回復

使用道具 舉報

6#
ID:876745 發表于 2021-1-12 14:27 | 只看該作者
zyztoto 發表于 2021-1-12 14:19
一般情況下,別在中斷調子函數,留個標志就可以了,比如累加。再根據標志寫函數。

樓上的標志鎖有點問題,中斷都跳過了還要中斷干嘛?
回復

使用道具 舉報

7#
ID:298123 發表于 2021-1-25 17:11 | 只看該作者
如果邏輯互不干擾,就分成兩個函數
回復

使用道具 舉報

8#
ID:298123 發表于 2021-1-25 17:13 | 只看該作者
如果邏輯上互不干擾,就用兩個函數;如果邏輯上有耦合的地方,就需要加鎖或標記了
回復

使用道具 舉報

9#
ID:879809 發表于 2021-1-25 17:36 | 只看該作者
不要說“一般情況”,在一般情況下,樓主的問題不存在,真正的c語言里面,中斷和主函數都是可以調用同一個函數的,局部變量在調用的時候在堆棧上生成,退出該函數釋放局部變量,沒有什么不能用的。

樓主的情況屬于特殊情況,8051這個體系結構對于高級語言太不友好了,如果用標準c的做法,那點兒可憐的ram很快就會被用光,間址指令很少,這么做不光浪費空間也非常浪費時間。所以c51在這里才用了非標準的做法,局部變量地址固定,在鏈接后就有了具體位置,那么主函數調用這個函數的時候發生中斷調用這個函數,里面的局部變量就全亂套了,中斷返回后,繼續運行主函數調用的這個函數,里面的局部變量值都是錯的。我的辦法就是再寫一個函數,讓主函數和中斷函數調用的不是同一個即可。

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

10#
ID:282850 發表于 2021-1-26 00:58 | 只看該作者
剛用IAR試了一下,main中調用,TA中斷內再調用同一個函數,編譯沒有任何問題,看來是編譯器與MCU架構的關系。
回復

使用道具 舉報

11#
ID:879809 發表于 2021-1-26 11:10 來自觸屏版 | 只看該作者
f556 發表于 2021-1-26 00:58
剛用IAR試了一下,main中調用,TA中斷內再調用同一個函數,編譯沒有任何問題,看來是編譯器與MCU架構的關系 ...

被你笑死,IAR做過幾十種指令集的編譯器。。。至少在IAR8051這個編譯器上,你說的是錯誤的。
回復

使用道具 舉報

12#
ID:282850 發表于 2021-1-26 22:31 | 只看該作者
rundstedt 發表于 2021-1-26 11:10
被你笑死,IAR做過幾十種指令集的編譯器。。。至少在IAR8051這個編譯器上,你說的是錯誤的。

“.....看來是編譯器與MCU架構的關系”
有這句話。我沒有說IAR的C51可以!
回復

使用道具 舉報

13#
ID:879809 發表于 2021-1-26 23:04 | 只看該作者
f556 發表于 2021-1-26 22:31
“.....看來是編譯器與MCU架構的關系”
有這句話。我沒有說IAR的C51可以!

我當然知道你用的IAR一定不是51平臺的,只是提醒你以后發言要把自己要表達的內容說清楚,你瞧你這次回復還是沒說清楚你用的IAR到底是什么不是?
回復

使用道具 舉報

14#
ID:879809 發表于 2021-1-27 13:38 | 只看該作者
最后說一下,主函數和中斷能不能同時調用同一個函數,看編譯器是否支持遞歸即可。標準c語言是支持的,那么就可以隨便調用。大部分8位單片機c語言不支持,那就不能用。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区二区 | 999免费网站 | 国产一区中文 | 精品国产1区2区3区 在线国产视频 | 国产精品久久久久久久午夜 | 婷婷色婷婷 | 日韩一级欧美一级 | 欧洲精品一区 | 国产成年人视频 | 日韩一区在线播放 | 久久久久久久久淑女av国产精品 | 日韩淫片免费看 | 久操伊人 | 伊人网99 | 91精品久久久久久久久久 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 欧美在线一区二区三区四区 | 午夜天堂精品久久久久 | dy天堂| 在线中文字幕av | 午夜av影院| 黄视频网站免费观看 | 日韩综合网 | 国产成人免费 | 亚洲精品在线看 | 亚洲成人精品 | 国产免费拔擦拔擦8x高清 | 福利视频网| 黑人巨大精品欧美一区二区免费 | 福利二区 | 四虎影院新网址 | 先锋资源亚洲 | 精品国产伦一区二区三区观看方式 | 亚洲导航深夜福利涩涩屋 | 国产一级视频在线 | 欧美1页| 在线播放一区 | 韩国久久精品 | 免费看国产a | 亚洲午夜一区二区 | 日韩精品一区二区三区中文在线 |