Processing time measurement
Page last updated 06 Aug 2016, by
0
replies
.
Systick Timer による時間測定
volatile unsigned int temp0; volatile unsigned int temp1; volatile signed int time; // Systickレジスタ unsigned int *STK_CTRL = (unsigned int *)0xE000E010; unsigned int *STK_LOAD = (unsigned int *)0xE000E014; unsigned int *STK_VAL = (unsigned int *)0xE000E018; *STK_LOAD = 0x00ffffff; // リロード値に最大値を設定, 24ビットダウンカウンタ *STK_VAL = 0x00000000; // カウンタ値にリロード値を設定 *STK_CTRL = 0x00000004; // コアクロックを選択, 割り込みなし *STK_CTRL |= 0x00000001; // カウンタ動作許可 temp0 = *STK_VAL; // start : : temp1 = *STK_VAL; // end time = temp0 - temp1; printf ("time:%2d[clk]\r\n", time);
チェックサム処理時間測定
#define SIZE 1024 unsigned char receiveDataBuffer[SIZE] = {0, 1, 2, 3, 4, 5, 6, 7}; // checksum = 0x1c unsigned long receiveCheckSum = 0; unsigned char receiveCheckSumByte = 0; union union_tag { unsigned char *tempByte; unsigned long *tempWord; } union_v; // 14336[clk] temp0 = *STK_VAL; // start union_v.tempByte = receiveDataBuffer; for (long i = 1; i < SIZE ; i++) { receiveCheckSumByte += *union_v.tempByte; union_v.tempByte++; } temp1 = *STK_VAL; // end time = temp0 - temp1; printf ("pattern:0\r\n"); printf ("time:%2d[clk]\r\n", time); printf ("checkSum:%2x\r\n\r\n", receiveCheckSumByte); // 3392[clk] temp0 = *STK_VAL; // start union_v.tempWord = (unsigned long *)receiveDataBuffer; for (long i = 1; i < (SIZE / 4); i++) { receiveCheckSum += *union_v.tempWord; union_v.tempWord++; } *union_v.tempWord = receiveCheckSum; receiveCheckSumByte = 0; for (long i = 0; i < 4 ; i++) { receiveCheckSumByte += *union_v.tempByte; union_v.tempByte++; } temp1 = *STK_VAL; // end time = temp0 - temp1; printf ("pattern:1\r\n"); printf ("time:%2d[clk]\r\n", time); printf ("checkSum:%2x\r\n\r\n", receiveCheckSumByte); // 2658[clk] temp0 = *STK_VAL; // start receiveCheckSum = 0; union_v.tempWord = (unsigned long *)receiveDataBuffer; for (long i = 1; i < (SIZE / 4 / 8); i++) { receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; receiveCheckSum += *union_v.tempWord; union_v.tempWord++; } *union_v.tempWord = receiveCheckSum; receiveCheckSumByte = 0; for (long i = 0; i < 4 ; i++) { receiveCheckSumByte += *union_v.tempByte; union_v.tempByte++; } temp1 = *STK_VAL; // end time = temp0 - temp1; printf ("pattern:2\r\n"); printf ("time:%2d[clk]\r\n", time); printf ("checkSum:%2x\r\n\r\n", receiveCheckSumByte);
Please log in to post comments.