我想實(shí)現(xiàn)這樣的功能:打開SD卡中的文件,讀取80字節(jié)數(shù)據(jù)并發(fā)送出去,然后關(guān)閉文件,經(jīng)過一段時(shí)間,再打開該文件,接著上次再讀寫80字節(jié)數(shù)據(jù)并發(fā)送。 我的問題是:第二次如何將文件指針定位到上次讀寫的位置?我嘗試過了這樣的方法:在第二次打開文件時(shí),用字節(jié)偏移函數(shù)CH376ByteLocate( 80 );但是最終的結(jié)果表明還是從頭開始讀取。 我如果要想將文件指針定位到文件的任何位置,又該怎么做呢?
文件指針偏移就是調(diào)用CH376ByteLocate從指定位置讀取數(shù)據(jù),首先確保文件打開成功,CH376ByteLocate的返回值是否正確?
文件打開不成功,我用到了USB主機(jī)模式重置,原來是模式重置后要處理這個(gè)重置中斷,我加入了一個(gè)讀寫376數(shù)據(jù)的函數(shù),就可以了。我想應(yīng)該是將中斷狀態(tài)讀出來,這個(gè)中斷狀態(tài)就被消除了吧,這樣就可以執(zhí)行后面的文件打開操作了。我的理解若有不正確的地方,還請指點(diǎn)。
獲取中斷狀態(tài)并取消中斷請求是通過CMD01_GET_STATUS(0x22)命令來實(shí)現(xiàn)的。你重新設(shè)置模式后需要重新初始化。
還有一個(gè)問題,若未采用默認(rèn)波特率,是否重新設(shè)置USB模式后波特率就回到了默認(rèn)波特率? 根據(jù)我現(xiàn)在的調(diào)試情況,如果一直采用默認(rèn)波特率,切換模式就沒有問題,但是我如果重新設(shè)置了波特率,模式切換就不正常了,讀寫數(shù)據(jù)就不成功。
波特率的設(shè)置不會(huì)影響到模式切換,的具體看一下你是如何切換的?切換模式之后初始化能通過嗎?
謝謝你的回答。我用的是STC89C52與CH376通信的,都是12M晶振。經(jīng)過調(diào)試,現(xiàn)在我能確定確實(shí)不是模式切換的問題。目前從調(diào)試效果上看,是波特率會(huì)影響一些函數(shù)的執(zhí)行時(shí)間。 我開始在375000bps的情況下調(diào)用了CH376GetFileSize()函數(shù),經(jīng)調(diào)試發(fā)現(xiàn)要等待23秒左右才會(huì)把這個(gè)函數(shù)執(zhí)行完,我開始沒注意到這點(diǎn),以為程序沒有執(zhí)行了,其實(shí)只是執(zhí)行得很慢。不知這是什么原因。 另外,我在375000bps時(shí),發(fā)現(xiàn)執(zhí)行CH376ByteRead()的時(shí)間與buf[]的大小有關(guān),越小執(zhí)行時(shí)間越短(幾分鐘到幾秒),但是數(shù)據(jù)有時(shí)會(huì)發(fā)生錯(cuò)誤,應(yīng)該不是單片機(jī)RAM不夠的原因,因?yàn)槲矣胋uf[4]讀寫數(shù)據(jù)都會(huì)出錯(cuò),而我那個(gè)測試程序并不大。 還有一點(diǎn),就是波特率為57600bps、128000bps時(shí),讀寫是不成功的,這個(gè)我猜測是單片機(jī)實(shí)際產(chǎn)生的波特率與CH376實(shí)際產(chǎn)生的波特率偏差較大所致。 在波特率為9600時(shí),不會(huì)出現(xiàn)以上任何問題。 關(guān)于在375000bps時(shí)執(zhí)行上述兩個(gè)函數(shù)時(shí)間慢的問題,應(yīng)該不是單片機(jī)的問題,因?yàn)閱纹瑱C(jī)在該波特率下執(zhí)行其他程序塊是很快的,不知是否是CH376本身在該波特率下被這兩個(gè)函數(shù)訪問時(shí)就會(huì)出現(xiàn)這種情況?
首先,波特率的改變肯定會(huì)肯定會(huì)影響函數(shù)的時(shí)間,但是波特率提高只會(huì)使執(zhí)行時(shí)間縮短。其次,確保你改變波特率后,通訊接口能正常通訊,可以再做一下測試命令,有的單片機(jī)可能不支持較高傳輸速度。最后,設(shè)置成57600bps會(huì)有0.16%的誤差但不影響通訊、128000bps你是如何設(shè)置的(這個(gè)波特率可能誤差比較大會(huì)影響通訊)。
不好意思回復(fù)晚了,晚上才上網(wǎng)。正常通訊是可以的,我測試了初始化等函數(shù),中斷狀態(tài)都是正常的,我用的這款單片機(jī)串口通訊波特率最大可達(dá)375kbps,并且用另外的程序測試通過了,現(xiàn)在就是那兩個(gè)函數(shù)這種情況下執(zhí)行很慢,我也不明白為什么波特率提高執(zhí)行這兩個(gè)函數(shù)執(zhí)行時(shí)間反而變慢了,但通過設(shè)置標(biāo)志位,發(fā)現(xiàn)其他部分比如向文件寫數(shù)據(jù)的函數(shù)執(zhí)行還是很快的。128000bps用的公式boderate=6000000/(256-常數(shù)),發(fā)分頻系數(shù)、分頻常數(shù)來設(shè)定。近幾天暫時(shí)不調(diào)試那個(gè)模塊了,過些天再仔細(xì)重新調(diào)一下,看看是函數(shù)內(nèi)部的那個(gè)部分執(zhí)行慢。還是希望能得到貴公司的悉心指點(diǎn)。