㈠ 為什麼IAR沒有config.h
flash RAM大小不匹配,空間不足。修改icf文件及los_config.h里的mem大小。
遇到能夠進到reset_Handler中,但是無法到達main函數的問題時,說明啟動沒梁是OK的,向量表完成了映棚察正射,引導了reset_Handler下,無法跳轉到main函數,優先考慮芯鏈悔片選型、flash、RAM大小等是否匹配,以及是否存在過大的數組導致內存不夠。(2)Flash download warning: 386104 out of 386104 bytes from data record CODE:[0x08080020,0x080DE457] will not be flashed, 更換jlink即解決該問題。
㈡ 請教在IAR中,全速運行正常,復位重啟後不正常了
你查看你是不是包含了鏈接文件(icf文件),並在鏈接文件中定義了代碼的ROM起始地址不是你晶元默認的起始地址。
一般要做了iap,在app調試時經常出現這樣的情況:模擬正常,離線無法運行。
解決方法是:要麼正確設置ICF文件rom起始地址或取消ICF文件,要麼把配套的IAP代碼段先寫進flash
㈢ IAR怎樣建—FLASH工程
一、生成一個新項目 要使用IAR進行STM32嵌入式系統開發,必須從建立一個項目(project)開始,下面以在E:\下建立一個名為Example的項目為例介紹。 1. 創建項目目錄、復制公共文件 (1)在E盤下創建名為的Example文件夾,即項目根目錄為E:\Example。 (2)在項目根目錄下建立一個EWARMv5文件夾用於存放項目文件、工作空間文件和項目配置相關文首梁棚件。 (3)解壓標准外設驅動文件庫(stm32f10x_stdperiph_lib_V3.1.2.zip),將其中的「Libraries」文件夾復制到Example目錄下。 (4)復制標准外設驅動庫目錄Project\Template下的stm32f10x_conf.h、stm32f10x_it.c、stm32f10x_it.h三個文件到Example文件夾下。main.c可以不用復制,我們自己寫。 復制標准外設驅動庫目錄Project\Template\EWARMv5下的stm32f10x_flash.icf、stm32f10x_flash_extsram.icf、stm32f10x_nor.icf和stm32f10x_ram.icf到Example\EWARMv5文件夾下。 復制好的目錄如圖1所示。 圖1. Example文件夾下的文件 2. 創建新的工作空間 嵌入式系統開發大都是面向項目(Project)的,需要建立渣廳Project來管理項目開發。IAR EWRAM又是基於工作空間(Workspace)的集成開發環境,Project必須放在工作空間裡面,所以我們首先應該建立工作空間。一個工作空間裡面可以放多個項目。 開始?程序?IAR Systems?IAR Embedded Workbench,進入IDE環境。File ?New?Workspace。 這樣工作空間就建好了,但是這個工作空間裡面還沒有項目,所以還不能保存,下面將在這個工作空間裡面建立新項目。 3. 創建新項目 在上面第2步已經建立好的工作空間里創建新項目。 Project?Create New Project。彈出「Create New Project」對話框,「Tool Chain」選擇ARM,「Project Template」選擇Empty project模板,這樣所有的文件都由用戶自己來寫。點擊OK,彈出「另存為…」對話框,選擇我們剛剛建好的Example目錄下的EWARMv5文件夾下,然後輸入工程名 ,這里我輸入Template,然後點擊保存。這樣一個名為Template的IAR EWARM項目就建好了,下面我們添加一些文件,然後再修改一些參數,使得這個項目真正地能夠使用。 4. 添加文件到項目 (1)文件分組 按說現在就可以往項目裡面添加文件了,但是由於ARM系統開發涉及文件較多,類型繁雜,加上我們使用ST公司的標准固件庫驅動文件,這樣就要添加很多文件到項目里,隨著項目的復雜程度加大,文件的數量是很多的。為了便於管理,我們將這些文件在項目里分組保存,IAR EWARM支持文件分組。 在IDE左側的Workspace裡面,我們在剛剛建立的Template項目上點右鍵,選擇Add? Add Group…。在彈出的對話框裡面輸入組名(Group Name),點OK即可。我們將添加如下幾個組,如圖2所示。 從圖2可見,項目名字後面有個星號(*),這是說明項目或工作空間已經修 改,但是還沒有保存,現在點File?Save All,這時彈出對話框讓我們保存工作空間。還記得工作空間嗎?第2步我們新建的工作空間,但是當時沒有保存,因為當時工作者則空間裡面沒有項目,不能保存。輸入工作空間名Template,然後點保存,這時候項目後面的星號*消失。 註:工作空間擴展名.eww,項目擴展名
㈣ IAR環境下Flash調試和RAM調試的區別
首先說說什麼是Flash調試和RAM調試,Flash調試就是通常意義下的普通調試,即將編譯鏈接之後的code下載到單片機的ROM區,數據放到RAM區,然後進行調試;而RAM調試則是將數據放到RAM區的同時再從RAM區中額外開辟出一段空間存放可執行code,這樣就是code和數據同時運行在RAM區裡面。
至於為什麼要刻意區分出這兩種調試方式,其實在低端MCU領域是沒有RAM調試這個概念的,其中很大一部分原因是它沒有足夠大的RAM空間在存放編譯後code代碼的同時仍然可以拿出額外的空間作為數據RAM的,而在高端MCU領域中,比如ARM,動輒幾十KB的RAM是很常見的,在不運行超大工程的情況下是完全可以拿出一部分空間運行代碼的,所以也就出現了RAM調試這種方法了。
相比於Flash調試,RAM調試則與生俱來的帶來兩個最大的先天優勢,一個是RAM的可擦寫的次數理論上是無限的,在調試代碼的期間我們往往是需要不斷下載更新的,而Flash的擦寫次數是有限的(一般幾萬次、幾十萬次不等,雖然看起來足夠多,但是也心疼的慌),因此在調試期間我們可以選擇RAM調試;另一個方面,則更是RAM調試的強項(Flash真夠悲催的),在RAM區的代碼執行速率和效率遠高於需要不斷地讀寫Flash區代碼的,這點毋庸置疑,所以在當今智能手機比拼硬體的時代,我們選擇一款強大的CPU是應該的,但是要想讓系統運行的更流暢,足夠大的機載RAM是必須的,呵呵。當然RAM調試的缺點是掉電丟失,在RAM區運行的代碼在掉電的情況下是不會被保存的,下次上電單片機仍然會執行Flash區內部的老的代碼,這點是需要注意的,很多人忘記考慮這點,在RAM調試功能完畢,等拿到現場單片機獨立運行的時候卻發現程序是不對的,咳咳,那當然不對啦。。。
理論部分介紹完畢,下面我們結合IAR開發環境來分析一下怎麼實現Flash調試和RAM調試的。其實我們仔細研究發現,Flash調試和RAM調試在IAR下的區別只是.icf配置文件的不同罷了,其實很簡單很容易理解,也就是把單片機的內存映射改變了,下面單拿出兩者不同的部分曬出來(重要部分加了注釋,供參考):
flash調試的256KB_Pflash.icf文件:
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;/* 中斷向量的起始地址為ROM的首地址 */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x0;
define symbol __ICFEDIT_region_ROM_end__ = 0x00040000;/* 256k ROM空間 */
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8410;
define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;
…
define exported symbol __VECTOR_TABLE = 0x00000000;/* 中斷向量表放在ROM區0起始地址 */
define exported symbol __VECTOR_RAM = 0x1fff8000;
…
define symbol __code_start__ = 0x00000410;/* 代碼開始區地址在ROM區 */
…
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__code_start__ { readonly section .noinit };
place in ROM_region { readonly, block CodeRelocate}; /* 將只讀代碼放到ROM區 */
place in RAM_region { readwrite, block CodeRelocateRam,
block CSTACK, block HEAP };
RAM調試的64k_ram.icf文件:
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x1fff8000;/* 中斷向量的起始地址為RAM的首地址 */
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x0;
define symbol __ICFEDIT_region_ROM_end__ = 0x0;/* 將ROM空間置0 */
define symbol __ICFEDIT_region_RAM_start__ = 0x1fff8000;
define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;
…
define exported symbol __VECTOR_TABLE = 0x1fff8000;/* 中斷向量表放在RAM區首地址 */
define exported symbol __VECTOR_RAM = 0x1fff8000;
…
define symbol __code_start__ = 0x1fff8410;/* 將代碼開始區地址在RAM區 */
…
place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
place at address mem:__code_start__ { readonly section .noinit };
place in RAM_region { readonly, block CodeRelocate }; /* 將只讀代碼放到RAM區 */
place in RAM_region { readwrite, block CodeRelocateRam,
block CSTACK, block HEAP };
㈤ 如何使用C90TFS flash驅動實現kinetis晶元的flash
安裝好C90TFS flash之後,可以從如下的路徑找到KL25的相關代碼。
安裝路徑\Standard Sotfware Driverv101\C90TFS\Demos\build\MKL25Z128xxx4
可以看到,供有兩種編譯器的代碼,分別為IAR以及CW10.4, CW10.4 的工程可以用CW10.4及其以後的版本打開。IAR的工程可以使用IAR embedded workbench for ARM 6.4.2之後的版本打開。
打開路徑下IAR的工程,可以看到C90TFS具體包含的KL25flash常式情況,如下圖:
從上圖中可以看到,一共具有4個碧銀弊常式, 具體常式的功能已經在圖中標出。本次常式講解使用demo_normal常式,旨在讓大家熟悉C90TFS flashAPI函數的使用。
2、 C90TFS flash常式配置文搏液件情況
這里以demo_normal 工程為例,講解配置文件。程序一共有兩種運行方式, 分別為從RAM運行,以及從Flash運行。通過配置相應的.icf文件(IAR)或者.ld文件(CW 10.x)實現。
IAR中,.icf文件可以打開project後在link_file文件夾下找到。
CW中,.ld 文件可以打開project後在project_settings->linker_files文件夾下找到悔族。
這里以CW工程為例講解,IAR的情況也類似,主要是空間的起始結束地址,以及堆棧分配,中斷向量的分配等。
(1) CW16KB_Ram.ld
(2) CW128KB_Pflash.ld
3. 測試平台
CW10.6 以及TWR-KL25Z48M。
選擇使用CW10.6,是因為,測試的時候,可以直接看出哪些代碼在編譯范圍內,便於查看代碼,
㈥ IAR 中後綴 .icf .xcl 文件 是什麼樣的文件 有什麼用途
大家好啊
小弟問個幼稚的問題
NXP系列的ARM在IAR中用J-link調試時,項目選項中的linker:連接器命令文件(.icf)怎麼搞,去什麼地方下載,還是自己製作啊
小弟迷茫中,吃不好喝不好的,謝謝大哥大姐們了,給條明路吧,搞開始搞ARM
大家好啊
小弟問個幼稚的問題
NXP系列的ARM在IAR中用J-link調試時,項目選項中的linker:連接器命令文件(.icf)怎麼搞,去什麼地方下載,還是自己製作啊
小弟迷茫中,吃不好喝不好的,謝謝大哥大姐們了,給條明路吧,搞開始搞ARM
㈦ IAR用JLINK調試S3C2440 ARM晶元中的鏈接其命令文件(.icf)怎麼弄啊(按照LPC2103命令文件弄不行)
1,進入「OPTION」,在項目文件上右鍵;
2,進入「linker」中的「config」下的「override default」;
3,調入你所有的"s3c2440....icf"
㈧ 一個iar flash調試的問題
可否貼上自定義的icf文件和官方常式的icf文件內容
㈨ IAR 5.50 for ARM在那裡指定代碼段的位置
在options for node「項目」,子項Linker中Config下,Linker configuration file中Edit,以及Debugger中Setup下,Setup macros使用mac文件定製。
㈩ 如何在IAR for ARM中定義常量或數組到flash而不是RAM中const,__flash關鍵字都不行,網上說加一個編譯開
我對你問題的理解:程序中的任何數組定義都是暫存在Ram中的,如果你要寫到Flash中,斷電後還能保留的話?需要對硬體進行操作。看你用什麼硬體,查看該單片機的操作手冊,用戶使用手冊之類的,看對Flash怎麼操作,一般是通過配置寄存器,將數據寫到Flash中。
定義常量或數組直接到Flash,這個功能很好,如果真如網上所說加一個編譯就可以,那我也要學習學習。