熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2022-5-30 17:15
正文摘要:我在燒錄的時(shí)候不知道怎么跳到bootload區(qū),只是在APP程序區(qū)寫(xiě)FLASH,我發(fā)現(xiàn)只要是寫(xiě)0X0000-0X0800之間程序就會(huì)卡死,我是那里寫(xiě)的不對(duì)嗎? 因?yàn)镾TC15F2K60S2單片機(jī)只有512字節(jié)的ISP區(qū)在0XF000-0XF1FF,是不是我現(xiàn)在 ... |
STC官網(wǎng)有完整的遠(yuǎn)程更新例程,可以去STC官網(wǎng)下載。 |
樓主,可以到STC官網(wǎng)下載官方的例程,百度stcai |
188610329 發(fā)表于 2022-6-6 16:40 寫(xiě)的很詳細(xì) 贊一個(gè) ![]() |
188610329 發(fā)表于 2022-6-6 16:40 是的,最近在弄這個(gè),發(fā)現(xiàn)好多坑, |
513489465 發(fā)表于 2022-6-6 08:49 感覺(jué)怎么講不通了呢? 你說(shuō)的 “bootload” 究竟是什么東西? 為什么要寫(xiě) “bootload” 程序? 如果是上電自檢,那是在系統(tǒng)自檢區(qū)的東西,不是你能改的,如果是你自己要寫(xiě)一個(gè) bootload2 程序,你想做成什么樣子? 和 ISPPROGRAM 的實(shí)質(zhì)區(qū)別是什么?為什么要在 ISPPROGRAM 之外增加這么一個(gè)東西? 單片機(jī) 上電后的默認(rèn)流程 訪問(wèn)bootload 區(qū),檢查是否開(kāi)始下載新程序還是 跳轉(zhuǎn)到 APP區(qū)啟動(dòng), 到此為止,都不是你可以插手的事情。 然后就是 0x0000 這里會(huì)有強(qiáng)制跳轉(zhuǎn),開(kāi)始運(yùn)行 STARTUP.A51 里面的設(shè)定, 然后,再?gòu)?qiáng)制跳轉(zhuǎn) 開(kāi)始執(zhí)行 void main() 里面你設(shè)計(jì)的程序。 如果你不會(huì)匯編, 到此為止的所有操作,你依然不可以插手。 然后,才開(kāi)始執(zhí)行,你自己編寫(xiě)的程序,這里開(kāi)始才是你能插手的地方, 所以,你應(yīng)該明白, 你想把東西寫(xiě)在0x0000 到底是否切合實(shí)際了吧? 再來(lái)說(shuō),ISPPROGRAM 這個(gè)程序,這個(gè)程序,你看過(guò)沒(méi)? 是你自己寫(xiě)的么? 如果是官方提供的 樣本,你會(huì)發(fā)現(xiàn),是匯編寫(xiě)的, 真正把 ISPPROGRAM 寫(xiě)在 0xF000 處 依靠的是這個(gè)程序里的 ORG 偽指令,和你C 里面的 define 沒(méi)有1毛錢(qián)的關(guān)系, 你說(shuō)你上傳圖片里,有ISPPROGRAM這一塊代碼么? 你連程序怎么運(yùn)作的原理都沒(méi)搞明白,就試圖修改,是不是急了一點(diǎn)? IAP 在線自定義下載,牽涉到很多單片機(jī)的基礎(chǔ)認(rèn)知。你沒(méi)有真正理解單片機(jī)的動(dòng)作原理, 要么老老實(shí)實(shí)抄官方代碼,要么就不要?jiǎng)舆@一塊,尤其是 0x0000~0x01ff 這個(gè)區(qū)間,里面有多少坑,你根本就趟不過(guò)來(lái)。 |
188610329 發(fā)表于 2022-5-31 11:38 只要是我是小白第一次弄這個(gè),也不知道Bootload程序到底怎么寫(xiě),我是寫(xiě)兩個(gè)代碼區(qū)合并嗎?我要是知道BOOTLOAD程序的寫(xiě)法就不請(qǐng)教您了,我想的是:程序上電先運(yùn)行判斷是否進(jìn)入app程序和升級(jí)程序,放在0X 0000地址也可以阿 |
513489465 發(fā)表于 2022-5-31 08:27 STC15F2K系列單片機(jī)里面, 可以支持 IAP可編程的單片機(jī),只有 IAP15F/L2k61S, 以及 IAP15F/L2k61S2,這兩款。但是,你的問(wèn)題里寫(xiě)的型號(hào) 確是 STC15F2K60S2, 即便,我提了之后,你依然回答的是: IAP15F2K60S2 而不是: IAP15F2K61S2 …… 然后,還是我答非所問(wèn)了?你可以翻翻論壇 問(wèn)答區(qū)記錄, 用錯(cuò)型號(hào),造成實(shí)現(xiàn)不了功能的 比比皆是。對(duì),也許你不是其中的一份子, 但是,用到 IAP 自定義下載功能的,對(duì)于程序編寫(xiě)的嚴(yán)謹(jǐn)程度,非常高,嚴(yán)謹(jǐn)?shù)牧?xí)慣應(yīng)該從型號(hào)開(kāi)始,你覺(jué)得呢? 從你后發(fā)的下載器的照片來(lái)看,你用的型號(hào)應(yīng)該沒(méi)錯(cuò),那么來(lái)具體討論一下你的問(wèn)題。 IAP 可編程自定義下載, 說(shuō)白了,就是自己寫(xiě)一個(gè) 串口接收程序,用來(lái)接收上位機(jī)發(fā)來(lái)的程序數(shù)據(jù),然后,利用操作 IAP 寄存器,把串口收到的程序?qū)懭雴纹瑱C(jī)的Flash. 所以,這個(gè)程序 要滿(mǎn)足3個(gè)條件。 1)串口接收的代碼,(可以不依賴(lài)串口中斷的串口接收代碼) 2)寫(xiě)Flash的代碼。 3)在改寫(xiě)Flash 區(qū)域的時(shí)候,不會(huì)誤刪除自己本身的(1)(2)兩部分代碼。 所以,一般…… 自定義可編程程序, 通常我們命名為: ISPPROGRAM 的程序我們一般放在FLASH的末尾,以IAP15F2K61S2 為例,就是放在 0xF000 的位置。 你的(圖片1)里面 ISPPROGRAM 定義在 0x0000 我不知道你如何設(shè)計(jì)的,我不做過(guò)多評(píng)價(jià),要知道0x0000可是程序啟動(dòng)后的入口啊…… 至少,不用匯編,用C來(lái)的寫(xiě)的話,我是沒(méi)法做到把ISPPROGRAM 放在 程序區(qū) 從 0x0000 開(kāi)始, 0x0003 0x000B 每8個(gè)字節(jié)一個(gè)坑的,那么多中斷向量的地方,存放自定義可編程程序。 并且,自定義可編程程序的目的是什么? 改寫(xiě)程序,改寫(xiě)程序,你能不牽涉到中斷這些? 這些東西都不需要改?自定義下載程序放在 這塊地方,就算你……, 沒(méi)有就算了,我覺(jué)得是寫(xiě)不出來(lái)的。 我不清楚你說(shuō)的 BootLoad 區(qū)是指的什么? 如果是單片機(jī)自己的 bootload 區(qū),那么你是訪問(wèn)不了的,是出廠后寫(xiě)在你不可訪問(wèn)區(qū)域的也不會(huì)存在于0x0200的。 如果是你自己寫(xiě)的程序,那么,你項(xiàng)目中是否把 你自己定義的 Bootload 定向在 0x0200 了呢? 不要說(shuō) define 那只是定義一個(gè)字符串 程序的所在位置強(qiáng)制定義在指定地址, C語(yǔ)言是通過(guò) _at_ 匯編 通過(guò) AT 或者 ORG 來(lái)指定的. 就你貼的這些代碼,除了看出ISPPROGRAM 0x0000 是極度不合理之外,其他都看不出來(lái)。 |
要實(shí)現(xiàn)自定義下載編程, 需要IAP 系列單片機(jī),你用STC系列是實(shí)現(xiàn)不了的…… |
Powered by 單片機(jī)教程網(wǎng)