2014-02-07 1 views
0

내 프로젝트에 atxmega256a3bu 마이크로 컨트롤러를 사용하고 있습니다. 코드를 컴파일하고 프로그래밍 한 것처럼 프로그램 아키텍처를 만들고 싶습니다. 이제는 일부 API 만 변경하고 다시 프로그래밍 할 수 있습니다. 보드의 다른 부분은 변경되지 않아야하며 새로 컴파일 된 API는 이미 플래시에 프로그래밍 된 나머지 코드와 함께 작동 할 수 있습니다. 예를 들어마이크로 컨트롤러에서 코드의 일부만 또는 API를 업데이트하는 방법

, 나는 모든 코드를 만들어 나는 아래와 같은 기능을 변경하려는 경우 지금

todo_callback() 
{ 
printf("nothing to do"); 
} 

라는 API 기능이있는 보드로 다운로드 한 :

todo_callback() 
{ 
printf("updated to do"); 
} 

그러면 전체 플래시 코드를 변경하지 않고 어떻게이 기능을 업데이트 할 수 있습니까?

감사합니다. shreyas.

+0

왜 그렇게하고 싶습니까? 일반적으로 펌웨어는 마이크로 컨트롤러에서 전체적으로 리 플래시됩니다. – starblue

+0

내가 전체 이미지를 업데이트하기에 충분한 메모리가 없기 때문에 fail safe 업데이트를 사용하기 때문에 이전 이미지를 백업 할 때 더 많은 메모리가 필요합니다. 이 작업을 수행 할 수 있으면 업데이트중인 응용 프로그램 섹션 만 백업해야합니다. –

답변

1

당신이하려는 것에 따라 "고정"코드가 기능 구현을위한 함수 테이블을 사용할 수있게 할 수 있습니다. 새로운 구현을 추가하려면 적절한 포인터를 덮어 씌울 수 있어야합니다.

는 (이것은 물론, 함수 테이블에 쓰기, 또는 테이블에 대한 새 항목을 찾을 수있는 능력을 부팅에서 발생한다는 것을 의미한다.)

기본적으로, 아이디어는 간접적 인 수준을 추가하는 것입니다 함수를 사용하는 코드를 변경하지 않고도 함수를 바꿀 수 있습니다.

+0

John, 지원해 주셔서 감사합니다. boot 섹션에서 todo_callback() 함수에 대한 함수 테이블을 관리해야한다는 말입니까? 코드를 변경하지 않고 함수를 교환하는 답을 얻지 못했습니다. 어떻게해야합니까? –

+0

'기본'코드는 todo_callback 함수 포인터 ("set_todo_callback")를 설정하는 함수를 제공합니다. 아무 것도 설정되지 않은 경우 사용하는 기본값을 가질 수 있습니다. 필요한 경우 새 코드가 실제로이를 설정합니다. (필자는 이러한 기능이 많은 경우를 대비해 "기능 테이블"에 대해 언급했지만 기능이 하나뿐이라면 과장되었습니다.) 다음 내용이 도움이 될 수 있습니다. http://www.newty.de/fpt/index.html –

관련 문제