S32K1XX調試--S32K116的flash擦寫程序移植

一、環境

  • S32DS IDE

二、背景

  • NXP官方出的開發工具 S32KDS提供了圖像化配置工具PE(Processor Export),全部外設能夠在界面中配置,而後自動生成代碼。
  • 這樣雖然方便了點,但我的感受對學習不是頗有利。操做起來方便,但對底層接觸的就比較少,想看他底層部分,嵌套太多層,看起來很累。
  • 因此我參考他們的寄存器版的程序,本身編寫本身所需。但有些沒有寄存器版本,例如flash的擦寫部分就沒有參考程序,因此我只能參考PE生成的程序進行移植。

三、調試過程

  • 先找個官方基礎例程,做爲基礎移植工程。app

  • 移植過程仍是用原來官方程序的Project_Settings文件夾下 S32K116_16_flash.ld、S32K116_16_ram.ld、startup_S32K116.S、system_S32K116.c,後面須要關注到這幾個文件函數

  • 配置好外設,實現定時器,串口功能等以後(確保功能實現,說明移植相對沒問題),就開始移植PE生成程序flash_partitioning_s32k116的flash_driver.c,flash_driver.h兩個文件。對應添加頭函數,對應初始化,調用兩個文件所提供的函數。程序以下:工具

/* Disable the global interrupt */
    INT_SYS_DisableIRQGlobal();
	ret = FLASH_DRV_EraseSector(&flashSSDConfig, APP_PFLASH_START_ADDR, flashSSDConfig.PFlashSize - APP_PFLASH_START_ADDR);
	/* Enable the global interrupt*/
	INT_SYS_EnableIRQGlobal();
  • 上面對應的APP_PFLASH_START_ADDR是我打算存放app程序的開始地址,INT_SYS_DisableIRQGlobal與INT_SYS_EnableIRQGlobal是開啓和關閉全局中斷,其餘參數能夠參考原PE生成程序學習

  • 運行起來,發現程序卡死,跳轉到DefaultISR,解決方法能夠參考如下連接:S32K1XX調試–程序跑飛到DefaultISR開發工具

  • 解決了DefaultISR問題,又出現跳轉到HardFault問題,解決方法能夠參考如下連接:S32K1XX調試–快速定位HardFaultspa

  • 定位到是FLASH_DRV_CommandSequence函數的問題,屢次查找後,發現是相應的函數內容沒有從flash拷貝到RAM,程序跑起來跳轉過去,至關於跳轉到了一個空函數,因此出現HardFault.net

  • 這時考慮到多是連接以及啓動程序問題,因而打算大幹一場,處理移植問題(操做以前仍是頗有必要備份程序)。調試

  • 準備開始替換Project_Settings文件夾下的幾個文件,到PE所生成的程序flash_partitioning_s32k116處去找,從對應文件處把內容全選複製過來,到現有程序全選粘貼(由於有些文件命名可能不同,但目的是同樣的),而後編譯code

  • 編譯過程當中,可能還會有報錯,好比某些參數未定義,例如init_data_bss未定義,這個在startup.c和startup.h中有定義,再從PE處移植過來便可blog

  • 可能還會有其餘問題,再移植添加便可。

其餘

  • 由於本身在這部分卡了幾天,因此就把調試過程編寫出來供參考,但願可以幫到你。
  • 編寫或是解釋不免有錯,歡迎指正。

另附參考所提到的兩個連接:
[1]. S32K1XX調試–程序跑飛到DefaultISR
[2]. S32K1XX調試–快速定位HardFault

相關文章
相關標籤/搜索