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

標題: 關于25AA020A器件寫入數據時,程序需要死等 [打印本頁]

作者: 不死鳥a    時間: 2025-4-26 20:44
標題: 關于25AA020A器件寫入數據時,程序需要死等
  1. #include "E2_25AA020A.h"
  2. void E2_WriteByte(unsigned char addr,unsigned char dat)
  3. {
  4.         unsigned char sta;
  5.         SPI_CS = 0;
  6.         spiWriteByte(WREN);
  7.         SPI_CS = 1;
  8.         
  9.         SPI_CS = 0;
  10.         spiWriteByte(WRITE);
  11.         spiWriteByte(addr);
  12.         spiWriteByte(dat);
  13.         SPI_CS = 1;
  14.       <b>  while(1)
  15.         {
  16.                 SPI_CS = 0;
  17.                 spiWriteByte(RDSR);
  18.                 sta = spiReadByte();
  19.                 SPI_CS = 1;
  20.                 if((sta & 0x01) == 0)
  21.                 {
  22.                         break;
  23.                 }
  24.         }</b>
  25. }
復制代碼



各位大佬們,我加粗部分代碼是寫入25AA020A這個器件時,需要等待這個狀態,有啥辦法不讓他死等來查詢這個狀態位嗎

作者: 不死鳥a    時間: 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

作者: xiaobendan001    時間: 2025-4-27 07:45
不死鳥a 發表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

用中斷方式嘛
作者: wufa1986    時間: 2025-4-27 10:19
你說的問題,通常高級芯片都有DMA功能去避免這個問題
作者: qinlu123    時間: 2025-4-27 10:48
不死鳥a 發表于 2025-4-26 20:46
還有在UART中,需要查詢while(TI),while(RI),有什么辦法可以避免這種阻塞代碼嗎,謝謝大佬們的解答

可以參考下我發的帖子。串口的解決辦法是使用DMA發送但是要注意需要判斷DMA是否為忙狀態也就是說不用DMA發送串口每發一個字節就得判斷一下狀態然后發下一個字節,使用DMA后每發一幀(一幀數據多長是個人定義的)需要判斷一下DMA狀態然后發下一幀。如果數據量不大波特率夠高直接阻塞式發送也沒事。
作者: 不死鳥a    時間: 2025-4-27 14:23
xiaobendan001 發表于 2025-4-27 07:45
用中斷方式嘛

問一下大佬有代碼參考一下嘛?

作者: 不死鳥a    時間: 2025-4-27 14:23
wufa1986 發表于 2025-4-27 10:19
你說的問題,通常高級芯片都有DMA功能去避免這個問題

歐克,謝謝大佬
作者: xiaobendan001    時間: 2025-4-27 18:06
不死鳥a 發表于 2025-4-27 14:23
問一下大佬有代碼參考一下嘛?

論壇搜一下MODBUS的代碼,我以前看過,應該就是中斷的
作者: Y_G_G    時間: 2025-4-28 22:52
你可以把這個等待當成應答,或者寫入完成標志位,怎么叫都行,你理解就行了
1: 把寫入一個完整數據(這包括寫下地址,讀寫標志等等)和等待分開寫,寫兩個函數
2: 聲明一個僵局位,或者一個全局u8變量都行,看實際情況吧,我這行就用  F  來代替吧, 現在定義規則: F == 1 就是正在寫入, F !=1  就是寫入完成
3:這個是你的寫入函數
這個是讀取函數,這個函數可以是有返回值的,也可以是不返回,在函數中操作F就可以了有的單片機返回參數代碼量和RAM占用多一點,對于幾十B運行內存的單片機來說,這很重要,看你自己的情況
那么好,在主程序中就可以通過F的值來進行其它操作了








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