|
STC15F2K系列單片機(jī)里面, 可以支持 IAP可編程的單片機(jī),只有 IAP15F/L2k61S, 以及 IAP15F/L2k61S2,這兩款。但是,你的問題里寫的型號 確是 STC15F2K60S2, 即便,我提了之后,你依然回答的是: IAP15F2K60S2 而不是: IAP15F2K61S2 …… 然后,還是我答非所問了?你可以翻翻論壇 問答區(qū)記錄, 用錯型號,造成實(shí)現(xiàn)不了功能的 比比皆是。對,也許你不是其中的一份子, 但是,用到 IAP 自定義下載功能的,對于程序編寫的嚴(yán)謹(jǐn)程度,非常高,嚴(yán)謹(jǐn)?shù)牧?xí)慣應(yīng)該從型號開始,你覺得呢?
從你后發(fā)的下載器的照片來看,你用的型號應(yīng)該沒錯,那么來具體討論一下你的問題。
IAP 可編程自定義下載, 說白了,就是自己寫一個 串口接收程序,用來接收上位機(jī)發(fā)來的程序數(shù)據(jù),然后,利用操作 IAP 寄存器,把串口收到的程序?qū)懭雴纹瑱C(jī)的Flash. 所以,這個程序 要滿足3個條件。
1)串口接收的代碼,(可以不依賴串口中斷的串口接收代碼)
2)寫Flash的代碼。
3)在改寫Flash 區(qū)域的時候,不會誤刪除自己本身的(1)(2)兩部分代碼。
所以,一般…… 自定義可編程程序, 通常我們命名為: ISPPROGRAM 的程序我們一般放在FLASH的末尾,以IAP15F2K61S2 為例,就是放在 0xF000 的位置。
你的(圖片1)里面 ISPPROGRAM 定義在 0x0000 我不知道你如何設(shè)計的,我不做過多評價,要知道0x0000可是程序啟動后的入口啊……
至少,不用匯編,用C來的寫的話,我是沒法做到把ISPPROGRAM 放在 程序區(qū) 從 0x0000 開始, 0x0003 0x000B 每8個字節(jié)一個坑的,那么多中斷向量的地方,存放自定義可編程程序。
并且,自定義可編程程序的目的是什么? 改寫程序,改寫程序,你能不牽涉到中斷這些? 這些東西都不需要改?自定義下載程序放在 這塊地方,就算你……, 沒有就算了,我覺得是寫不出來的。
我不清楚你說的 BootLoad 區(qū)是指的什么? 如果是單片機(jī)自己的 bootload 區(qū),那么你是訪問不了的,是出廠后寫在你不可訪問區(qū)域的也不會存在于0x0200的。
如果是你自己寫的程序,那么,你項目中是否把 你自己定義的 Bootload 定向在 0x0200 了呢? 不要說 define 那只是定義一個字符串
程序的所在位置強(qiáng)制定義在指定地址, C語言是通過 _at_ 匯編 通過 AT 或者 ORG 來指定的.
就你貼的這些代碼,除了看出ISPPROGRAM 0x0000 是極度不合理之外,其他都看不出來。
|
|