STM8S 에서 RAM상주 함수 만들기
STM8S에서 IAP 소스상에서 Flash 를 Block 으로 쓰기 위해서 RAM 상주 함수를 만들어서 사용하는데 ,
이유는 Flash를 1byte, 4byte,Block 단위 로 쓸수 있는데, 한번 쓸때 걸리는 시간이 3ms 정도다. 즉 1byte 를 쓰나 Block 단위로
쓰나 시간은 동일하다는 것이다. 문제는 1byte 와 4byte 는 flash 에서 쓸수 있으나 Block 은 RAM 에서만 쓸수 있다고
되어 있다. 시간을 줄이기 위해서는 무조건 Block으로 써야 한다.
그래서 IAP 소스를 살펴보니 아래와 같이 선언되어 있고
#pragma location = "FLASH_CODE"
void Mem_ProgramBlock(u16 BlockNum, FLASH_MemType_TypeDef MemType, u8 *Buffer)
icf 파일에
initialize by copy { rw, ro section .tiny.rodata, section FLASH_CODE};
로 선언이 되어 있었다.
이부분을 예제 파일쪽에서 사용해 보기 위해서 예제 소스의 icf 파일에 아래처럼 되어 있는데
// Initialization initialize by copy { rw section .far.bss, rw section .far.data, rw section .far_func.textrw, rw section .huge.bss, rw section .huge.data, rw section .huge_func.textrw, rw section .iar.dynexit, rw section .near.bss, rw section .near.data, rw section .near_func.textrw, rw section .tiny.bss, rw section .tiny.data, ro section .tiny.rodata};
이것을 아래 처럼 수정하고 해당 함수를 소스에 추가 해서 컴파일 했다.
// Initialization initialize by copy { rw section .far.bss, rw section .far.data, rw section .far_func.textrw, rw section .huge.bss, rw section .huge.data, rw section .huge_func.textrw, rw section .iar.dynexit, rw section .near.bss, rw section .near.data, rw section .near_func.textrw, rw section .tiny.bss, rw section .tiny.data,rw,ro section .tiny.rodata ,section FLASH_CODE };
linker 에서 에러가 났다.
그래서 ro section .tiny.rodata ,section FLASH_CODE }; 로 수정했다.
그래도 linker 에서 에러가 났다.
IAR 메뉴얼에도 정확하게 표기가 안되어 있어서 고민중에 다른 사이트에서 ramfunc keyword를 찾아서 icf 파일은
원래대로 나두고 아래 처럼만 수정 했다.
__ramfunc void Mem_ProgramBlock(u16 BlockNum, FLASH_MemType_TypeDef MemType, u8 *Buffer)
이상 없이 컴파일 잘된다.
map 파일을 보면 아래처럼 되어 있다.
Mem_ProgramBlock 0x000010 0xd7 Code Gb util.o [1]
즉 0x000010 번지 (즉 RAM영억) 에 0xd7을 차지하는 Code 가 잡힌다는 것이다.
해결....
해당내용에 대한 사이트 링크 한다.
http://www.embeddedworld.co.kr/atl/view.asp?a_id=5681
'공부 > STM8' 카테고리의 다른 글
STM8S IAR에서 __eeprom 으로 eeprom 사용 하기 (0) | 2014.11.03 |
---|---|
STM8S 표준 회로도 자료및 컴파일설정 파일 자료 (0) | 2013.02.05 |
STM8 중 가장큰 80pin 회로도 (0) | 2013.02.05 |
STM8S 용 RTOS (0) | 2013.02.05 |
STM8 관련 다양한 정리가 되어 있는 사이트 (0) | 2013.02.05 |