大家好,我是新手.最近在改动高人提供的IAP时遇到一些困惑.罗列如下:
1: STM8的应用程序区,是如何组织的呢?我在STM8的中文文档中看到有 块,页 的描述:
参考手册 P27
这里描述的是块擦/写操作时,不同容量STM8S对一块的定义.
但我在实际操作中发现,
STM8S103 ,改写FLASH->CR2(NCR2)后,向地址写64字节后,写入成功了.
但在STM8S105中,写64字节, FLASH->CR2 并没有清0,读 MCU的数据也没有发现指定的地址被修改.
按手册中描述,写128字节,仍如是.
索性逐加地址写512字节,,我发现 FLASH->CR2被清0,用STLINK读MCU数据,指定的数据变了?
这是怎么回事?
在 <参考手册> P18看到:
我糊涂了,块似乎没什么用,STM8S103中 一块=一页,105中 8块=1页,
但在 块编程 中,(STM8S105)为什么写 一块(128),不成功,写一页(512) 反而成功了?
2: 中断向量表,似乎是固定在0x8000及其后的128个字节中.(???是否正确?)
是否可以这样理解,这个向量表,指明了发生各种中断后所指向的运行代码地址?
3:高人留下的Bootloader 是针对 STM8S103的,虽然105自带,但用习惯了,所以想把 103的改成105的.
看到代码中 有 IN_RAM() 包裹的函数.从 名称可以看出,似乎此断函数是到 RAM中执行.
在代码的最后,有一句:
asm("JP $8200");
我虽然没学过汇编, JP 按顺序读就像是JUMP,猜想这句的功能就是 跳到 8200这个地址扫行.
8000是初始地址,200=512字节,正好和编译好的bootloader文件大小接近.
那么,跳转后,,,执行用户代码,那在之前BootLoader 中用过的那些RAM怎么办?全部清空了吗?
如果问题很幼稚的话请大家原谅我的无知.:P
|
|