有沒有人知道如何處理以下問題:
我有一個IAR Embedded工作臺。該項目正在使用SDRAM來運行它的代碼和Flash ROM。 SDRAM的代碼從SD卡加載。但是,在SDRAM中也存儲了一些數據,如全局或靜態變量。其中一些必須初始化。初始化步驟iar_data_init3
函數調用在low_level_init
函數之後。所以問題在於初始化SDRAM中的一些變量時,初始化函數從iar_data_init3
調用,其代碼位於SDRAM自身內部。這是錯誤的,因爲從SD卡加載SDRAM代碼尚未完成。IAR初始化函數的放置
我嘗試了C/C++開發指南中描述的手動初始化,但這並沒有幫助。
被調用的函數是__sti__routine
,它提供變量的初始化。所有這些功能都是由IAR生成的。有什麼辦法可以告訴鏈接器將初始化函數放入Flash ROM嗎?
編輯1: 這是來自IAR手冊C/C++的信息。 這是一個如何使用手動初始化的例子。
在連接配置文件:
initialize manually { section MYSECTION };
然後IAR文件說:
您可以使用此源代碼示例初始化部分:
#pragma section = "MYSECTION"
#pragma section = "MYSECTION_init"
void DoInit()
{
char * from = __section_begin("MYSECTION_init");
char * to = __section_begin("MYSECTION");
memcpy(to, from, __section_size("MYSECTION"));
}
我無法理解然而,首先, MYSECTION_init和MYSECTION有什麼區別。 ASLO,如果我有一個全局變量:
SomeClass myclass;
它應該放在SDRAM, 那麼如何初始化爲它做了什麼?我想手動初始化變量, 並將初始化函數放到閃存ROM中。 (問題是通過將變量放置到SDRAM中,它的初始化函數也被放置到SDRAM中)。
在上面的例子中,你正在處理函數 但是如果在開始時需要初始化變量,上面的方法將是usefuk將變量放置到某個地方,但是如何初始化那些函數變量?我想控制將初始化函數放在哪裏。 – maximus
@maximus我引用的例子是專門針對函數的,因爲這是你在你的問題中提出的問題。但是同樣的方法適用於函數和變量。請參閱鏈接的參考指南或參考指南中適用於您的特定芯片的標題爲「控制內存中的數據和功能放置」的小節。 –
我已閱讀手冊。我已經更新了這個問題。你能再請參閱嗎? – maximus