STC15F2K系列单片机里面, 可以支持 IAP可编程的单片机,只有 IAP15F/L2k61S, 以及 IAP15F/L2k61S2,这两款。但是,你的问题里写的型号 确是 STC15F2K60S2, 即便,我提了之后,你依然回答的是: IAP15F2K60S2 而不是: IAP15F2K61S2 …… 然后,还是我答非所问了?你可以翻翻论坛 问答区记录, 用错型号,造成实现不了功能的 比比皆是。对,也许你不是其中的一份子, 但是,用到 IAP 自定义下载功能的,对于程序编写的严谨程度,非常高,严谨的习惯应该从型号开始,你觉得呢?
从你后发的下载器的照片来看,你用的型号应该没错,那么来具体讨论一下你的问题。
IAP 可编程自定义下载, 说白了,就是自己写一个 串口接收程序,用来接收上位机发来的程序数据,然后,利用操作 IAP 寄存器,把串口收到的程序写入单片机的Flash. 所以,这个程序 要满足3个条件。
1)串口接收的代码,(可以不依赖串口中断的串口接收代码)
2)写Flash的代码。
3)在改写Flash 区域的时候,不会误删除自己本身的(1)(2)两部分代码。
所以,一般…… 自定义可编程程序, 通常我们命名为: ISPPROGRAM 的程序我们一般放在FLASH的末尾,以IAP15F2K61S2 为例,就是放在 0xF000 的位置。
你的(图片1)里面 ISPPROGRAM 定义在 0x0000 我不知道你如何设计的,我不做过多评价,要知道0x0000可是程序启动后的入口啊……
至少,不用汇编,用C来的写的话,我是没法做到把ISPPROGRAM 放在 程序区 从 0x0000 开始, 0x0003 0x000B 每8个字节一个坑的,那么多中断向量的地方,存放自定义可编程程序。
并且,自定义可编程程序的目的是什么? 改写程序,改写程序,你能不牵涉到中断这些? 这些东西都不需要改?自定义下载程序放在 这块地方,就算你……, 没有就算了,我觉得是写不出来的。
我不清楚你说的 BootLoad 区是指的什么? 如果是单片机自己的 bootload 区,那么你是访问不了的,是出厂后写在你不可访问区域的也不会存在于0x0200的。
如果是你自己写的程序,那么,你项目中是否把 你自己定义的 Bootload 定向在 0x0200 了呢? 不要说 define 那只是定义一个字符串
程序的所在位置强制定义在指定地址, C语言是通过 _at_ 汇编 通过 AT 或者 ORG 来指定的.
就你贴的这些代码,除了看出ISPPROGRAM 0x0000 是极度不合理之外,其他都看不出来。
|