2014-02-07 54 views
0

我正在爲我的項目使用atxmega256a3bu微控制器,我想編寫一個程序體系結構,就像編譯和編寫代碼一樣,現在只有一些API可以更改並重新編程爲閃存板的其他部分不應該改變,並且新編譯的API可以與閃存中已經編程的其餘代碼一起工作。如何僅更新微控制器中的代碼的一些部分或API

例如, 我已做了所有的代碼,並下載了它進入董事會,如果我想改變,因爲下面的函數,它有一個名爲

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

一個API函數現在:

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

那麼我怎樣才能更新這個功能,而不會改變整個Flash代碼。

Regards, shreyas。

+0

你爲什麼想這樣做?通常固件在微控制器上被重新整理。 – starblue

+0

,因爲我沒有足夠的內存來更新整個圖像,因爲我想使用故障安全更新,所以爲了備份舊圖像,我需要更多內存。如果我可以這樣做,那麼只需要備份正在更新的應用程序部分。 –

回答

1

根據您要做的事情,您可以讓「固定」代碼使用功能表來實現其功能。要添加新的實現,你只需要能夠覆蓋適當的指針。

(這當然意味着功能表應該是可寫的,或找到新的條目表的能力,在引導產生的。)

基本上,這個想法是添加一個間接層這樣可以在不更改使用它們的代碼的情況下交換功能。

+0

嗨,John,謝謝你的支持,你是否說我必須在啓動部分管理todo_callback()函數的函數表?我沒有得到你在不改變代碼的情況下交換函數的答案,怎麼做? –

+0

'base'代碼將提供一個函數來設置todo_callback函數指針(「set_todo_callback」)。如果沒有設置,它可以使用默認值。如果需要,新的代碼會實際設置它。 (如果你有很多這樣的功能,我提到了一個「功能表」,但是如果它只是一個功能,那就太過分了) 這可能有所幫助:http://www.newty.de/fpt/index.html –

相關問題