欧美vvv,亚洲第一成人在线,亚洲成人欧美日韩在线观看,日本猛少妇猛色XXXXX猛叫

新聞資訊

    大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是在i.-EVK上利用程序給SDRAM做壓力測試。

    我們知道恩智浦i.系列是高性能MCU的代表,對于這個超高主頻(>=)的怪獸,不做點人機交互圖形顯示或者跑點算法方面的高階應用實在有點浪費它的能力,高階應用往往需要大容量緩存(RAM),i.系列內部RAM最大也就1-2MB,不是特別寬裕,因此我們在板級設計時往往會為i.再搭配一塊外部RAM。外部RAM的種類選擇很多,可通過外設掛/PSRAM或者通過SEMC外設掛SDRAM/SRAM,其中SDRAM是最常見的選擇,官方EVK上默認也是選了SDRAM。

    有了外部SDRAM雖然解決了系統緩存容量危機,但也同時可能引入潛在的系統穩定性問題,畢竟SDRAM是外部器件,容易受干擾(比如PCB走線或者環境溫度等),如果SDRAM的讀寫訪問不可靠,那么系統就會有不可預知的奇怪問題發生,因此我們需要在板子出廠時對SDRAM做一次壓力測試(既測試了SDRAM芯片和PCB設計,也測試了對應的SEMC外設配置),今天痞子衡就選用程序給SDRAM上一次強度。

    關于程序的基本知識,痞子衡之前專門寫過一篇文章 《內存讀寫正確性壓力測試程序()》 ,本篇就是基于了解基本知識之后的一次實踐。來,讓我們開始吧。

    一、準備工作1.1 硬件平臺NXP i.MX EVK

    要開始給SDRAM做壓力測試,首先你得有一塊開發板,恩智浦官網上有i.評估板,板載SDRAM芯片型號為鎂光的,我們今天就來測試它。

    1.2 集成開發環境IAR EWARM

    ARM -M微控制器的集成開發環境有很多,其中IAR EWARM憑借優良的特性備受廣大工程師青睞,今天痞子衡就選用IAR作為軟件環境,具體版本為IAR EWARM v8.50.6。

    1.3 官方軟件開發包NXP SDK

    在開始移植程序到i.上之前,我們需要先有一個i.的基本hello world的例程,當然我們可以對著數據手冊自己從頭寫一個,但是這里痞子衡推薦使用官方軟件開發包。

    注冊并登錄恩智浦官網,來到 SDK 頁面,在" Board"里選擇EVK-后點擊Build SDK后跳轉到下一個頁面段友sdk初始化失敗,點擊 SDK后便可得到SDK_2.9.1_EVK-.zip,下面是痞子衡下載的開發包具體版本信息:

    二、開始實測2.1 跑通hello world

    給i. EVK板子供電(J2口接5V輸出的電源),并且使用USB線連接電腦與板子的J41 USB口,此時在設備管理器應該可以看到USB虛擬的串口(EVK板載LPC-LINK2調試器內含USB轉串口功能,如果看不到串口,請自行安裝LPC-LINK2驅動)。

    打開前一步下載的開發包里的\SDK_2.9.1_EVK-\\\\\iar\.eww工程,確認工程里文件選擇的是.icf,然后J21 JTAG口連接上Jlink Plus直接將工程下載進主芯片的RAM運行。

    如果工程運行正常,你在串口調試助手(,8N1)里應該能看到"hello world."打印輸出。

    2.2 移植程序

    以工程為基礎,將從官方網站下載到的-4.5.0.tar包解壓,將\-4.5.0\路徑下的如下源文件(.c或.h)全部拷貝到hello world工程目錄下:

    \memtester-4.5.0
    ????????????????\memtester.h
    

    sdk初始失敗是什么意思_段友sdk初始化失敗_友盟ktplay sdk

    ????????????????\memtester.c????????--主程序入口 ????????????????\sizes.h????????????--關于系統位數(32/64bit)的一些定義 ????????????????\types.h????????????--所用數據類型的定義 ????????????????\tests.h ????????????????\tests.c????????????--測試算法子程序

    將上面所有源文件全部添加進工程并將工程更名為,然后再將工程中原主函數入口文件.c更名為main.c,此時基本工程就完成了。但注意此時工程無法編譯,因為源文件還需要進一步修改。

    2.2.1 適配嵌入式平臺

    我們下載的源碼本用作在Unix-like系統上運行的,所以源碼里面有一些僅適用于Unix-like系統上運行的代碼,需要將這些代碼全部刪除以適合在嵌入式平臺運行。

    關于頭文件引用部分,需要刪除.c和tests.c文件里的一些不適用的#語句,改用SDK里的標準頭:

    //?下述Unix系統頭需刪除
    #include?
    #include?
    #include?
    #include?
    #include?
    #include?
    #include?
    #include?
    #include?
    

    段友sdk初始化失敗_sdk初始失敗是什么意思_友盟ktplay sdk

    #include? //?下述SDK標準頭需添加 #include?"fsl_common.h" #include?"fsl_debug_console.h"

    整個源碼其實最主要(唯一)的改動就是.c里的原main()函數,本來main函數是接受控制臺傳來的用戶選項完成解析獲取必要的參數(內存起始地址,測試長度,壓力測試循環次數),然后運行tests.c里各種算法子程序。我們需要做的就是將main函數里代碼各種刪減,把不適用于MCU上運行的代碼全部拿掉,并且將main函數原型改為如下:

    /*******************************************************************************
    *?Input?parameters:
    *?----?phystestbase?:?memory?base?address
    *?----?wantraw??????:?memory?size
    *?----?memsuffix????:?memory?unit,?B,K,M,G?for?B,?KB,?MB,?GB
    *?----?loop?????????:?memory?test?code?loop?times
    *?----?pagesize?????:?memory?pase?size?(Bytes)
    */
    int?memtester_main(ul?phystestbase,?ul?wantraw,?char?*memsuffix,?ul?loops,?ul?pagesize)?
    {}

    最后里跑tests.c里具體算法子程序時,如果遇到失敗的情況,默認是繼續執行下一個算法子程序,我們可以加一個控制變量,決定遇到失敗是直接結束整個測試還是繼續往下跑。

    2.2.2 板級初始化

    上一節里已經將.c里面的main()函數改成了(),所以我們直接在原.c改成的main.c里的main函數中增加()的調用即可段友sdk初始化失敗,注意按需設置測試參數(下述代碼里的設置就是一個示例,測試地址開始的64KB內存,循環一次即可)。此外Cache是否使能對測試影響很大,建議關掉測試。

    段友sdk初始化失敗_友盟ktplay sdk_sdk初始失敗是什么意思

    typedef?struct?_semc_test_config?{
    ??uint32_t?baseAddr;
    ??uint32_t?testSize;
    ??uint32_t?loopNum;
    ??uint32_t?dramFreq;
    ??uint32_t?enableCache;
    }?semc_test_config_t;
    int?fail_stop?=?1;
    int?main(void)
    {
    ????char?memsuffix?=?'B';
    ????/*?Init?board?hardware.?*/
    ????BOARD_InitHardware();
    ????/*?---------------?stress?test?---------------?*/
    ????semc_test_config_t?testConfig;
    ????testConfig.baseAddr?=?0x80000000;
    

    友盟ktplay sdk_段友sdk初始化失敗_sdk初始失敗是什么意思

    ????testConfig.testSize?=?64?*?1024; ????testConfig.loopNum?=?1; ????testConfig.dramFreq?=?CLOCK_GetFreq(kCLOCK_SemcClk); ????testConfig.enableCache?=?0; ???? ????if?(!testConfig.enableCache)?{ ????????/*?Disable?D?cache?*/ ????????SCB_DisableDCache(); ????} ????PRINTF("\r\n##########?Print?out?from?target?board?##########\r\n"); ????PRINTF("\r\nSDRAM?r/w?test?settings:\r\n"); ????PRINTF("??????Base?Addr:?0x%x;\r\n",?testConfig.baseAddr); ????PRINTF("??????Test?Size:?%d?Bytes;\r\n",?testConfig.testSize); ????PRINTF("??????Test?Loop:?%d;\r\n",?testConfig.loopNum);???? ????PRINTF("??????SDRAM?Freq:?%d?Hz;\r\n",testConfig.dramFreq); ????PRINTF("??????Enable?Cache:?%d;\r\n\r\n",?testConfig.enableCache); ????/*?Run?memory?stress?test:?64KByte,?loop=1,?page_size?=?1kbyte?*/

    友盟ktplay sdk_段友sdk初始化失敗_sdk初始失敗是什么意思

    ????memtester_main(testConfig.baseAddr,?testConfig.testSize,?&memsuffix,?testConfig.loopNum,?(1*1024)); ????while?(1) ????{ ????} }

    2.2.3 串口打印功能

    串口打印功能的改動比較簡單,直接把原.c和tests.c文件里的()全部替換成()即可,函數在原hello world工程里已經實現了。

    2.3 參數配置

    痞子衡在程序的基本知識介紹里說過,幾乎沒有參數配置,就是需要在sizes.h文件里把如下兩個宏加進去:

    #define?ULONG_MAX??(4294967295UL)
    #define?TEST_NARROW_WRITES

    2.4 輸出結果

    到這里的移植工作就完全結束了,此時工程(代碼和變量都鏈接在TCM里)也應該能正常編譯了。你可能會疑問,SEMC外設的初始化代碼在哪里?。縿e急,工程選項調試器設置里提供了兩種SDRAM初始化腳本,我們隨便選用一種即可:

    另外需要注意的是,在工程預編譯選項里需要加上宏,因為工程時鐘初始化函數()會根據這個宏來決定要不要重配SEMC,我們已經有SDRAM初始化腳本了,不需要在工程里再配SEMC時鐘了。

    現在還等什么?將工程趕緊下載進芯片并打開串口調試助手看結果啊。痞子衡為了盡快得到結果,僅測試了64KB的空間,按說應該測試全部32MB空間才對,但這個測試時間是很漫長的,如果循環次數大于1,那等待時間就更長了。如果測試中遇到了失敗,除了要檢查板級硬件外,還可以調整SDRAM初始化腳本里的配置再次測試,直至通過壓力測試。

    想偷懶的朋友直接移步痞子衡的 去下載移植好的工程,工程在\-m-apps\apps\\bsp\下面。

    至此,在i.-EVK上利用程序給SDRAM做壓力測試痞子衡便介紹完畢了,掌聲在哪里~~~

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有