MDK填充FLASH为0xFF

MDK填充FLASH为0xFF

参考

area 指定地址 https://blog.csdn.net/zyboy2000/article/details/6752170?utm_source=blogxgwz1

分散文件 http://www.keil.com/support/docs/3407.htm

汇编伪指令 https://blog.csdn.net/tinylaker/article/details/50673375

使用分散文件

  1. Add the following linker switch to Project -> Options for target -> Linker -> Misc Controls:

    这里可以用hex形式表示

    --pad=VALUE   ;0xFF
    
  2. 更改加载文件,这个文件一般在输出目录下,后缀名为sct,取消默认的勾,启用这个加载文件并更改,添加一行,(END_ADR - START_ADR) 也就是FLASH大小

    END_OF_BLOCK (END_ADR - START_ADR) FIXED EMPTY 0x0 {}
    
  3. 例子如下

    ; *************************************************************
    ; *** Scatter-Loading Description File generated by uVision ***
    ; *************************************************************
    
    LR_IROM1 0x00000000 0x00020000  {    ; load region size_region
      ER_IROM1 0x00000000 0x00020000  {  ; load address = execution address
       *.o (RESET, +First)
       *(InRoot$$Sections)
       .ANY (+RO)
      }
      RW_IRAM1 0x20000000 UNINIT 0x00002000  {  ; RW data
       .ANY (+RW +ZI)
      }
      END_OF_BLOCK 0x00020000 FIXED EMPTY 0x0 {}   ;添加这一行,0x00020000就是FLASH大小
    }
    

使用汇编文件

	AREA    |.ARM.__at_0x0|, CODE, READONLY
        GBLA count                  ; declare local variable
count   SETA    1                   ; you are not restricted to
        WHILE   count <= 0          ; such simple conditions
count   SETA    count+1             ; In this case,
		DCB     0xFF
        WEND

51汇编填充

OVL.ASM 文件内容如下:
START_ADDR EQU 22C0H //空 ROM 区的起始地址
CODE_NUM EQU 7488 //所填代码的个数
CSEG AT START_ADDR
REPT CODE_NUM
DB 0A5H
ENDM
END

//指定地址
CSEG AT 0000H
ORG 0000H

51 C填充

  1. 新建C文件,比如BANK1.C,添加数组定义在CODE区, 比如10个字节的A5

    unsigned char code abc[]={0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,0xA5,};
    
  2. 在 User Segments 中填入此数组所在的 C 文件定义在所要指定地址的 CODE 区域中,这里写入10个字节的A5CODE区的BANK2的起始地址为0xEF00的区域)
    mark

posted @ 2019-01-03 20:58  zongzi10010  阅读(1316)  评论(0编辑  收藏  举报