均轉載自21ic論壇極海半導體專區(qū)
CoreMark是專門用于測試處理器內核性能的基準測試程序,測試的內容有:列表處理(查找和排序)、矩陣操作(常見的矩陣操作)、狀態(tài)機(確定輸入流是否包含有效數(shù)字)和CRC(循環(huán)冗余檢查),通過CoreMark跑分可以了解到MCU的算力。下面以APM32E103芯片和Keil為例,介紹一下如何在APM32上面運行CoraMark測試。CoreMark需要定時器用于計時,還需要用串口來打印輸出測試結果。
1、獲取相關代碼
在極海官網(wǎng)可以下載SDK:
https://www.geehy.com/uploads/tool/APM32E10x_SDK_V1.2.zip
打開 “APM32E10x_SDK_V1.1ExamplesUSARTUSART_PrintfProjectMDKUSART_Printf.uvprojx”,這個工程已經(jīng)有串口和滴答定時器的初始化,便于修改。
在CoreMark的GitHub下載庫:
https://github.com/eembc/coremark.git
*網(wǎng)速太慢的話可以在國內Gitee下載:
https://gitee.com/ssri-mirrors/coremark.git
2、實現(xiàn)串口打印printf
先初始化串口,直接用SDK本來的代碼就行。
然后重定義fputc(),以便能通過printf()輸出信息到串口調試助手。
struct __FILE
{
int handle;
};
FILE __stdout;
int fputc(int ch, FILE *f)
{
while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
USART_TxData(USART1, ch);
return ch;
}
3、實現(xiàn)計時函數(shù)GETMYTIME
使用滴答定時器或者普通定時器都可以,這里以滴答定時器為例,每隔10ms中斷一次。
SysTick_Config(SystemCoreClock / 100);
在中斷服務中需要一個全局變量進行10毫秒級計時。
void SysTick_Handler(void)
{
tick++;
}
4、添加CoreMark源代碼
將下載的CoreMark庫解壓到工程目錄下,在Keil工程中添加這幾個文件,其中 core_portme.c 在文件夾simple里面。
還要在工程設置中添加相關頭文件的路徑
把 core_main.c 中的 main(int argc, char *argv[]) 改為 coremark_main(int argc, char *argv[]) 以免編譯報錯。
MAIN_RETURN_TYPE
coremark_main(int argc, char *argv[])
在真正的int main()函數(shù)中調用 coremark_main 函數(shù)。
coremark_main(0,NULL); //正常開始運行測試算法
5、配置CoreMark
完成以上步驟后編譯會報兩個錯:
....coremark-maincore_main.c(383): error: #20: identifier "FLAGS_STR" is undefined
....coremark-mainsimplecore_portme.c(38): error: #20: identifier "ITERATIONS" is undefined
第1個錯誤是說沒定義 FLAGS_STR 這個字符串,這個是用來編譯優(yōu)化等級的,在 core_portme.h 添加這個字符串。
#define COMPILER_FLAGS "Level 0"
第2個錯誤是說沒定義 ITERATIONS 這個值,這個值決定了CoreMark算法執(zhí)行的次數(shù),對于性能越高的MCU這個值應該越大,在core_portme.c中添加這個宏定義, 這里先設個1000,后面根據(jù)需要再調整。
#define ITERATIONS 1000
接下來要配置關于時間的代碼,還是core_portme.c這個文件,將之前中斷服務函數(shù)計數(shù)的變量賦給 *_t ,同時也要包含tick變量的聲明。
#define NSECS_PER_SEC CLOCKS_PER_SEC
#define CORETIMETYPE clock_t
#define GETMYTIME(_t) (*_t = tick )
注意 CLOCKS_PER_SEC 這個宏,它表示每秒的時鐘數(shù),也就是一秒內tick計數(shù)的增加量,如果tick每隔10ms加一,那么CLOCKS_PER_SEC應該等于100;如果tick每隔1ms加一,那么CLOCKS_PER_SEC應該等于1000;
6、增加棧的大小
CoreMark運行時需要較大的棧空間,默認棧大小不夠,需要改大。
打開CMSIS欄中的啟動文件 startup_apm32e10x_hd.s ,把棧Stack_Size 增加到 2KB 。
Stack_Size EQU 0x00000800
7、下載程序并執(zhí)行
編譯并下載程序,等待10多秒后串口輸出測試結果。
有時優(yōu)化等級提高了,或者換了更強的MCU測試,會出現(xiàn)算法執(zhí)行時間小于10秒的提示:
這時只需要把 ITERATIONS 改大就行了。
#define ITERATIONS 2000
把優(yōu)化等級提到最高,測得CoreMark 1.0跑分為139.958。
以上就是用CoreMark庫對APM32E103進行性能測試的方法及步驟,對其他芯片的測試方法也是大同小異。
注:文章作者在原帖中提供了例程文件,有需要請至原文21ic論壇下載
原文地址:https://bbs.21ic.com/icview-3331250-1-1.html
-
處理器
+關注
關注
68文章
19820瀏覽量
233686 -
mcu
+關注
關注
146文章
17867瀏覽量
361008 -
測試
+關注
關注
8文章
5640瀏覽量
128372 -
定時器
+關注
關注
23文章
3289瀏覽量
117331 -
極海半導體
+關注
關注
0文章
153瀏覽量
4825
原文標題:APM32芯得 EP.56 | 基于APM32E103的CoreMark測試方法
文章出處:【微信號:geehysemi,微信公眾號:Geehy極海半導體】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
新品發(fā)布丨極海半導體推出工業(yè)級標準型APM32S103系列MCU
極海推出APM32A全系列車規(guī)級MCU

極海推出APM32A系列車規(guī)級MCU芯片
極海APM32F103RCT7通過AEC-Q100車規(guī)認證

評論