0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【先楫半导体HPM6750EVKMINI评估板试用体验】基准性能测试之一:整数计算能力Dhrystone

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-11-17 15:07 次阅读
本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2284138_1_1.html


前言
根据描述该新芯片整数计算能力Dhrystone达到4651 DMIPS
poYBAGKWMDSAAXRuAABEQm4ae6Y386.png
我们就实际测试一下。
:
Dhrystone是于1984年由Reinhold P. Weicker设计的一套综合的基准程序,该程序用来测试CPU(整数)计算性能。其输出结果为每秒钟运行Dhrystone的次数,即每秒钟迭代主循环的次数。
获取代码
http://www.roylongbottom.org.uk/classic_benchmarks.tar.gz
解压classic_benchmarks.tar.gz将classic_benchmarksclassic_benchmarkssource_codedhrystone2文件夹复制到自己的工程。
添加代码
dhrystone2文件夹复制到工程目录projled下,按如下刷新
pYYBAGKWMDWACI8mAAELKVwO3-k425.png
看到文件刷新了
pYYBAGKWMDaAIzWFAABSfB08Oxs805.png
修改代码
  • 主要添加时间测量接口
使用rt_tick_get
start_time();
end_time();
local_time();
等接口删除
  • 删除CPU相关接口
classic_benchmarksclassic_benchmarkssource_codecommon_32bitcpuidc.c中实现相应的接口,我们不使用
删除#include "cpuidh.h"相关接口
  • 修改dhry_1.c
  • fprintf全部替换为printf
  • 浮点打印改为整数打印
  • 调用
dhry_1.c中的main改为dhry_main
main.c的main函数中调用


  1. int main(void)
  2. {
  3. void dhry_main (int argc, char *argv[]);
  4. dhry_main(0,0);
  5. app_init_led_pins();
  6. static uint32_t led_thread_arg = 0;
  7. rt_thread_t led_thread = rt_thread_create("led_th", thread_entry, &led_thread_arg, 1024, 1, 10);
  8. rt_thread_startup(led_thread);
  9. return 0;
  10. }
复制代码


测试
考虑优化等级
考虑减少系统抵达中断频率
poYBAGKWMDiAKUwjAADQwJdiHEA186.png
RT_TICK_PER_SECOND=1000
RT_TICK_PER_SECOND=100
优化等级0
优化等级3
优化等级0
优化等级3
RAM中运行
828DMIPS
2508DMIPS
2536DMIPS
ROM中运行
828
2507DMIPS
2529DMIPS
最后实测大概2536DMIPS和表明的4651 DMIPS差一倍左右,不知道是标注的是双核一起,还是有优化措施可以再提高。


测试代码
dhry_1.c


  1. /* gcc dhry_1.c dhry_2.c cpuidc64.o cpuida64.o -m64 -lrt -lc -lm -o dhry2
  2. *************************************************************************
  3. *
  4. * "DHRYSTONE" Benchmark Program
  5. * -----------------------------
  6. *
  7. *Version: C, Version 2.1
  8. *
  9. *File: dhry_1.c (part 2 of 3)
  10. *
  11. *Date: May 25, 1988
  12. *
  13. *Author: Reinhold P. Weicker
  14. *
  15. *************************************************************************
  16. *
  17. * #define options not used
  18. */
  19. #include
  20. #include
  21. #include
  22. #include "rtthread.h"
  23. #include "dhry.h"
  24. //#include "cpuidh.h"
  25. #ifdef CNNT
  26. #define options "Non-optimised"
  27. #define opt "0"
  28. #else
  29. // #define options "Optimised"
  30. #define options "Opt 3 64 Bit"
  31. #define opt ""
  32. #endif
  33. /* Global Variables: */
  34. Rec_Pointer Ptr_Glob,
  35. Next_Ptr_Glob;
  36. int Int_Glob;
  37. Boolean Bool_Glob;
  38. char Ch_1_Glob,
  39. Ch_2_Glob;
  40. int Arr_1_Glob [50];
  41. int Arr_2_Glob [50] [50];
  42. char Reg_Define[40] = "Register option Selected.";
  43. Enumeration Func_1 (Capital_Letter Ch_1_Par_Val,
  44. Capital_Letter Ch_2_Par_Val);
  45. /*
  46. forward declaration necessary since Enumeration may not simply be int
  47. */
  48. #ifndef ROPT
  49. #define REG
  50. /* REG becomes defined as empty */
  51. /* i.e. no register variables */
  52. #else
  53. #define REG register
  54. #endif
  55. void Proc_1 (REG Rec_Pointer Ptr_Val_Par);
  56. void Proc_2 (One_Fifty *Int_Par_Ref);
  57. void Proc_3 (Rec_Pointer *Ptr_Ref_Par);
  58. void Proc_4 ();
  59. void Proc_5 ();
  60. void Proc_6 (Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par);
  61. void Proc_7 (One_Fifty Int_1_Par_Val, One_Fifty Int_2_Par_Val,
  62. One_Fifty *Int_Par_Ref);
  63. void Proc_8 (Arr_1_Dim Arr_1_Par_Ref, Arr_2_Dim Arr_2_Par_Ref,
  64. int Int_1_Par_Val, int Int_2_Par_Val);
  65. Boolean Func_2 (Str_30 Str_1_Par_Ref, Str_30 Str_2_Par_Ref);
  66. /* variables for time measurement: */
  67. #define Too_Small_Time 2
  68. /* Measurements should last at least 2 seconds */
  69. double User_Time;
  70. double Microseconds,
  71. Dhrystones_Per_Second,
  72. Vax_Mips;
  73. /* end of variables for time measurement */
  74. void dhry_main (int argc, char *argv[])
  75. /*****/
  76. /* main program, corresponds to procedures */
  77. /* Main and Proc_0 in the Ada version */
  78. {
  79. One_Fifty Int_1_Loc;
  80. REG One_Fifty Int_2_Loc;
  81. One_Fifty Int_3_Loc;
  82. REG char Ch_Index;
  83. Enumeration Enum_Loc;
  84. Str_30 Str_1_Loc;
  85. Str_30 Str_2_Loc;
  86. REG int Run_Index;
  87. REG int Number_Of_Runs;
  88. int endit, count = 10;
  89. FILE *Ap;
  90. int errors = 0;
  91. int i;
  92. int nopause = 1;
  93. /* Initializations */
  94. if (argc > 1)
  95. {
  96. switch (argv[1][0])
  97. {
  98. case 'N':
  99. nopause = 0;
  100. break;
  101. case 'n':
  102. nopause = 0;
  103. break;
  104. }
  105. }
  106. // if ((Ap = fopen("Dhry.txt","a+")) == NULL)
  107. // {
  108. // printf(" Can not open Dhry.txtnn");
  109. // printf(" Press Enternn");
  110. // int g = getchar();
  111. // exit(1);
  112. //}
  113. /***********************************************************************
  114. * Change for compiler and optimisation used *
  115. ***********************************************************************/
  116. Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
  117. Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));
  118. Ptr_Glob->Ptr_Comp = Next_Ptr_Glob;
  119. Ptr_Glob->Discr = Ident_1;
  120. Ptr_Glob->variant.var_1.Enum_Comp = Ident_3;
  121. Ptr_Glob->variant.var_1.Int_Comp = 40;
  122. strcpy (Ptr_Glob->variant.var_1.Str_Comp,
  123. "DHRYSTONE PROGRAM, SOME STRING");
  124. strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING");
  125. Arr_2_Glob [8][7] = 10;
  126. /* Was missing in published program. Without this statement, */
  127. /* Arr_2_Glob [8][7] would have an undefined value. */
  128. /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */
  129. /* overflow may occur for this array element. */
  130. //getDetails();
  131. //for (i=1; i<10; i++)
  132. //{
  133. // printf("%sn", configdata[i]);
  134. //}
  135. //printf("n");
  136. //printf ( " #####################################################nn");
  137. //for (i=1; i<10; i++)
  138. //{
  139. // printf( "%s n", configdata[i]);
  140. //}
  141. //printf ( "n");
  142. printf("##########################################n");
  143. printf ("n");
  144. printf ("Dhrystone Benchmark, Version 2.1 (Language: C or C++)n");
  145. printf ("n");
  146. printf ("Optimisation %sn", options);
  147. #ifdef ROPT
  148. printf ("Register option selectednn");
  149. #else
  150. printf ("Register option not selectednn");
  151. strcpy(Reg_Define, "Register optionNot selected.");
  152. #endif // "Register option Selected."
  153. /*
  154. if (Reg)
  155. {
  156. printf ("Program compiled with 'register' attributen");
  157. printf ("n");
  158. }
  159. else
  160. {
  161. printf ("Program compiled without 'register' attributen");
  162. printf ("n");
  163. }
  164. printf ("Please give the number of runs through the benchmark: ");
  165. {
  166. int n;
  167. scanf ("%d", &n);
  168. Number_Of_Runs = n;
  169. }
  170. printf ("n");
  171. printf ("Execution starts, %d runs through Dhrystonen",
  172. Number_Of_Runs);
  173. */
  174. Number_Of_Runs = 5000;
  175. do
  176. {
  177. Number_Of_Runs = Number_Of_Runs * 2;
  178. count = count - 1;
  179. Arr_2_Glob [8][7] = 10;
  180. /***************/
  181. /* Start timer */
  182. /***************/
  183. ///start_time();
  184. rt_tick_t start_time = rt_tick_get();
  185. for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
  186. {
  187. Proc_5();
  188. Proc_4();
  189. /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */
  190. Int_1_Loc = 2;
  191. Int_2_Loc = 3;
  192. strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
  193. Enum_Loc = Ident_2;
  194. Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc);
  195. /* Bool_Glob == 1 */
  196. while (Int_1_Loc < Int_2_Loc)  /* loop body executed once */
  197. {
  198. Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc;
  199. /* Int_3_Loc == 7 */
  200. Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc);
  201. /* Int_3_Loc == 7 */
  202. Int_1_Loc += 1;
  203. } /* while */
  204. /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
  205. Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc);
  206. /* Int_Glob == 5 */
  207. Proc_1 (Ptr_Glob);
  208. for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index)
  209. /* loop body executed twice */
  210. {
  211. if (Enum_Loc == Func_1 (Ch_Index, 'C'))
  212. /* then, not executed */
  213. {
  214. Proc_6 (Ident_1, &Enum_Loc);
  215. strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
  216. Int_2_Loc = Run_Index;
  217. Int_Glob = Run_Index;
  218. }
  219. }
  220. /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */
  221. Int_2_Loc = Int_2_Loc * Int_1_Loc;
  222. Int_1_Loc = Int_2_Loc / Int_3_Loc;
  223. Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc;
  224. /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */
  225. Proc_2 (&Int_1_Loc);
  226. /* Int_1_Loc == 5 */
  227. } /* loop "for Run_Index" */
  228. /**************/
  229. /* Stop timer */
  230. /**************/
  231. ///end_time();
  232. ///User_Time = secs;
  233. User_Time = ((rt_tick_get() - start_time)*1.0)/RT_TICK_PER_SECOND;
  234. printf ("%d runs %d milliseconds n",Number_Of_Runs, (int)(User_Time*1000));
  235. if (User_Time > 2)
  236. {
  237. count = 0;
  238. }
  239. else
  240. {
  241. if (User_Time < 0.05)
  242. {
  243. Number_Of_Runs = Number_Of_Runs * 5;
  244. }
  245. }
  246. } /* calibrate/run do while */
  247. while (count >0);
  248. printf ("n");
  249. printf ("Final values (* implementation-dependent):n");
  250. printf ("n");
  251. printf ("Int_Glob: ");
  252. if (Int_Glob == 5)printf ("O.K.");
  253. else printf ("WRONG ");
  254. printf ("%d", Int_Glob);
  255. printf ("Bool_Glob: ");
  256. if (Bool_Glob == 1) printf ("O.K.");
  257. else printf ("WRONG ");
  258. printf ("%dn", Bool_Glob);
  259. printf ("Ch_1_Glob: ");
  260. if (Ch_1_Glob == 'A')printf ("O.K.");
  261. else printf ("WRONG ");
  262. printf ("%c", Ch_1_Glob);
  263. printf ("Ch_2_Glob: ");
  264. if (Ch_2_Glob == 'B')printf ("O.K.");
  265. else printf ("WRONG ");
  266. printf ("%cn",Ch_2_Glob);
  267. printf ("Arr_1_Glob[8]: ");
  268. if (Arr_1_Glob[8] == 7)printf ("O.K.");
  269. else printf ("WRONG ");
  270. printf ("%d", Arr_1_Glob[8]);
  271. printf ("Arr_2_Glob8/7: ");
  272. if (Arr_2_Glob[8][7] == Number_Of_Runs + 10)
  273. printf ("O.K.");
  274. else printf ("WRONG ");
  275. printf ("%10dn", Arr_2_Glob[8][7]);
  276. printf ("Ptr_Glob-> ");
  277. printf ("Ptr_Comp: * %dn", (int) Ptr_Glob->Ptr_Comp);
  278. printf ("Discr: ");
  279. if (Ptr_Glob->Discr == 0)printf ("O.K.");
  280. else printf ("WRONG ");
  281. printf ("%d", Ptr_Glob->Discr);
  282. printf ("Enum_Comp: ");
  283. if (Ptr_Glob->variant.var_1.Enum_Comp == 2)
  284. printf ("O.K.");
  285. else printf ("WRONG ");
  286. printf ("%dn", Ptr_Glob->variant.var_1.Enum_Comp);
  287. printf ("Int_Comp: ");
  288. if (Ptr_Glob->variant.var_1.Int_Comp == 17)printf ("O.K.");
  289. else printf ("WRONG ");
  290. printf ("%d ", Ptr_Glob->variant.var_1.Int_Comp);
  291. printf ("Str_Comp: ");
  292. if (strcmp(Ptr_Glob->variant.var_1.Str_Comp,
  293. "DHRYSTONE PROGRAM, SOME STRING") == 0)
  294. printf ("O.K.");
  295. else printf ("WRONG ");
  296. printf ("%sn", Ptr_Glob->variant.var_1.Str_Comp);
  297. printf ("Next_Ptr_Glob-> ");
  298. printf ("Ptr_Comp: * %d", (int) Next_Ptr_Glob->Ptr_Comp);
  299. printf (" same as aboven");
  300. printf ("Discr: ");
  301. if (Next_Ptr_Glob->Discr == 0)
  302. printf ("O.K.");
  303. else printf ("WRONG ");
  304. printf ("%d", Next_Ptr_Glob->Discr);
  305. printf ("Enum_Comp: ");
  306. if (Next_Ptr_Glob->variant.var_1.Enum_Comp == 1)
  307. printf ("O.K.");
  308. else printf ("WRONG ");
  309. printf ("%dn", Next_Ptr_Glob->variant.var_1.Enum_Comp);
  310. printf ("Int_Comp: ");
  311. if (Next_Ptr_Glob->variant.var_1.Int_Comp == 18)
  312. printf ("O.K.");
  313. else printf ("WRONG ");
  314. printf ("%d ", Next_Ptr_Glob->variant.var_1.Int_Comp);
  315. printf ("Str_Comp: ");
  316. if (strcmp(Next_Ptr_Glob->variant.var_1.Str_Comp,
  317. "DHRYSTONE PROGRAM, SOME STRING") == 0)
  318. printf ("O.K.");
  319. else printf ("WRONG ");
  320. printf ("%sn", Next_Ptr_Glob->variant.var_1.Str_Comp);
  321. printf ("Int_1_Loc: ");
  322. if (Int_1_Loc == 5)
  323. printf ("O.K.");
  324. else printf ("WRONG ");
  325. printf ("%d", Int_1_Loc);
  326. printf ("Int_2_Loc: ");
  327. if (Int_2_Loc == 13)
  328. printf ("O.K.");
  329. else printf ("WRONG ");
  330. printf ("%dn", Int_2_Loc);
  331. printf ("Int_3_Loc: ");
  332. if (Int_3_Loc == 7)
  333. printf ("O.K.");
  334. else printf ("WRONG ");
  335. printf ("%d", Int_3_Loc);
  336. printf ("Enum_Loc: ");
  337. if (Enum_Loc == 1)
  338. printf ("O.K.");
  339. else printf ("WRONG ");
  340. printf ("%dn", Enum_Loc);
  341. printf ("Str_1_Loc: ");
  342. if (strcmp(Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING") == 0)
  343. printf ("O.K.");
  344. else printf ("WRONG ");
  345. printf ("%sn", Str_1_Loc);
  346. printf ("Str_2_Loc: ");
  347. if (strcmp(Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING") == 0)
  348. printf ("O.K.");
  349. else printf ("WRONG ");
  350. printf ("%sn", Str_2_Loc);
  351. printf ("n");
  352. if (User_Time < Too_Small_Time)
  353. {
  354. printf ("Measured time too small to obtain meaningful resultsn");
  355. printf ("Please increase number of runsn");
  356. printf ("n");
  357. }
  358. else
  359. {
  360. Microseconds = User_Time * Mic_secs_Per_Second
  361. / (double) Number_Of_Runs;
  362. Dhrystones_Per_Second = (double) Number_Of_Runs / User_Time;
  363. Vax_Mips = Dhrystones_Per_Second / 1757.0;
  364. printf ("Microseconds(/1000) for one run through Dhrystone: ");
  365. printf ("%d n", (int)(Microseconds*1000));
  366. printf ("Dhrystones per Second: ");
  367. printf ("%d n",(int)Dhrystones_Per_Second);
  368. printf ("VAXMIPS rating = ");
  369. printf ("%d n", (int)Vax_Mips);
  370. printf ("n");
  371. /************************************************************************
  372. * Add results to output file Dhry.txt *
  373. ************************************************************************/
  374. ///local_time();
  375. ///printf ( " #####################################################nn");
  376. ///printf ( " Dhrystone Benchmark 2.1 %s via C/C++ %sn", options, timeday);
  377. ///printf ( " VAX MIPS rating: %12.2lfnn",Vax_Mips);
  378. // printf( " Classic Benchmark Ratings for CPUSpeed.txt where 100 MHz Pentium = 100n");
  379. /*
  380. if (strtol(opt, NULL, 10) == 1)
  381. {
  382. printf( " Integer Dhry2 Opt %dnn", (int)(Vax_Mips / 130 * 100));
  383. }
  384. else
  385. {
  386. printf( " Integer Dhry2 NoOpt %dnn", (int)(Vax_Mips / 32 * 100));
  387. }
  388. */
  389. if (Int_Glob != 5)
  390. {
  391. printf ( " Wrong result Int_Glob Was %d Should be 5n", Int_Glob);
  392. errors = errors + 1;
  393. }
  394. if (Bool_Glob != 1)
  395. {
  396. printf ( " Wrong result Bool_Glob Was %d Should be 1n", Bool_Glob);
  397. errors = errors + 1;
  398. }
  399. if (Ch_1_Glob != 'A')
  400. {
  401. printf ( " Wrong result Ch_1_Glob Was %c Should be An", Ch_1_Glob);
  402. errors = errors + 1;
  403. }
  404. if (Ch_2_Glob != 'B')
  405. {
  406. printf ( " Wrong result Ch_2_Glob Was %c Should be Bn", Ch_2_Glob);
  407. errors = errors + 1;
  408. }
  409. if (Arr_1_Glob[8] != 7)
  410. {
  411. printf ( " Wrong result Arr_1_Glob[8] Was %d Should be 7n", Arr_1_Glob[8]);
  412. errors = errors + 1;
  413. }
  414. if (Arr_2_Glob[8][7] != Number_Of_Runs + 10)
  415. {
  416. printf ( " Wrong result Arr_2_Glob[8][7] Was %d Should be %dn", Arr_2_Glob[8][7], Number_Of_Runs + 10);
  417. errors = errors + 1;
  418. }
  419. if (Ptr_Glob->Discr != 0)
  420. {
  421. printf ( " Wrong result Ptr_Glob->Discr Was %d Should be 0n", Ptr_Glob->Discr);
  422. errors = errors + 1;
  423. }
  424. if (Ptr_Glob->variant.var_1.Enum_Comp != 2)
  425. {
  426. printf ( " Wrong result Ptr_Glob->variant.var_1.Enum_Comp Was %d Should be 2n", Ptr_Glob->variant.var_1.Enum_Comp);
  427. errors = errors + 1;
  428. }
  429. if (Ptr_Glob->variant.var_1.Int_Comp != 17)
  430. {
  431. printf ( " Wrong result Ptr_Glob->variant.var_1.Int_Comp Was %d Should be 17n", Ptr_Glob->variant.var_1.Int_Comp);
  432. errors = errors + 1;
  433. }
  434. if (strcmp(Ptr_Glob->variant.var_1.Str_Comp,"DHRYSTONE PROGRAM, SOME STRING") != 0)
  435. {
  436. printf ( " Wrong result Ptr_Glob->variant.var_1.Str_Comp Was %s Should be DHRYSTONE PROGRAM, SOME STRINGn", Ptr_Glob->variant.var_1.Str_Comp);
  437. errors = errors + 1;
  438. }
  439. if (Next_Ptr_Glob->Discr != 0)
  440. {
  441. printf ( " Wrong result Next_Ptr_Glob->Discr Was %d Should be 0n", Next_Ptr_Glob->Discr);
  442. errors = errors + 1;
  443. }
  444. if (Next_Ptr_Glob->variant.var_1.Enum_Comp != 1)
  445. {
  446. printf ( " Wrong result Next_Ptr_Glob->variant.var_1.Enum_Comp Was %d Should be 1n", Next_Ptr_Glob->variant.var_1.Enum_Comp);
  447. errors = errors + 1;
  448. }
  449. if (Next_Ptr_Glob->variant.var_1.Int_Comp != 18)
  450. {
  451. printf ( " Wrong result Next_Ptr_Glob->variant.var_1.Int_Comp Was %d Should be 18n", Next_Ptr_Glob->variant.var_1.Int_Comp);
  452. errors = errors + 1;
  453. }
  454. if (strcmp(Next_Ptr_Glob->variant.var_1.Str_Comp,"DHRYSTONE PROGRAM, SOME STRING") != 0)
  455. {
  456. printf ( " Wrong result Next_Ptr_Glob->variant.var_1.Str_Comp Was %s Should be DHRYSTONE PROGRAM, SOME STRINGn", Next_Ptr_Glob->variant.var_1.Str_Comp);
  457. errors = errors + 1;
  458. }
  459. if (Int_1_Loc != 5)
  460. {
  461. printf ( " Wrong result Int_1_Loc Was %d Should be 5n", Int_1_Loc);
  462. errors = errors + 1;
  463. }
  464. if (Int_2_Loc != 13)
  465. {
  466. printf ( " Wrong result Int_2_Loc Was %d Should be 13n", Int_2_Loc);
  467. errors = errors + 1;
  468. }
  469. if (Int_3_Loc != 7)
  470. {
  471. printf ( " Wrong result Int_3_Loc Was %d Should be 7n", Int_3_Loc);
  472. errors = errors + 1;
  473. }
  474. if (Enum_Loc != 1)
  475. {
  476. printf ( " Wrong result Enum_Loc Was %d Should be 1n", Enum_Loc);
  477. errors = errors + 1;
  478. }
  479. if (strcmp(Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING") != 0)
  480. {
  481. printf ( " Wrong result Str_1_Loc Was %s Should be DHRYSTONE PROGRAM, 1'ST STRINGn", Str_1_Loc);
  482. errors = errors + 1;
  483. }
  484. if (strcmp(Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING") != 0)
  485. {
  486. printf ( " Wrong result Str_2_Loc Was %s Should be DHRYSTONE PROGRAM, 2'ND STRINGn", Str_2_Loc);
  487. errors = errors + 1;
  488. }
  489. if (errors == 0)
  490. {
  491. printf ( " Numeric results were correctnn");
  492. }
  493. else
  494. {
  495. printf ( "n");
  496. }
  497. ///fclose(Ap);
  498. }
  499. if (nopause)
  500. {
  501. printf(" Press Enternn");
  502. int g = getchar();
  503. }
  504. }
  505. void Proc_1 (REG Rec_Pointer Ptr_Val_Par)
  506. /******************/
  507. /* executed once */
  508. {
  509. REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp;
  510. /* == Ptr_Glob_Next */
  511. /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */
  512. /* corresponds to "rename" in Ada, "with" in Pascal */
  513. structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob);
  514. Ptr_Val_Par->variant.var_1.Int_Comp = 5;
  515. Next_Record->variant.var_1.Int_Comp
  516. = Ptr_Val_Par->variant.var_1.Int_Comp;
  517. Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp;
  518. Proc_3 (&Next_Record->Ptr_Comp);
  519. /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp
  520. == Ptr_Glob->Ptr_Comp */
  521. if (Next_Record->Discr == Ident_1)
  522. /* then, executed */
  523. {
  524. Next_Record->variant.var_1.Int_Comp = 6;
  525. Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp,
  526. &Next_Record->variant.var_1.Enum_Comp);
  527. Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp;
  528. Proc_7 (Next_Record->variant.var_1.Int_Comp, 10,
  529. &Next_Record->variant.var_1.Int_Comp);
  530. }
  531. else /* not executed */
  532. structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp);
  533. } /* Proc_1 */
  534. void Proc_2 (One_Fifty *Int_Par_Ref)
  535. /******************/
  536. /* executed once */
  537. /* *Int_Par_Ref == 1, becomes 4 */
  538. {
  539. One_FiftyInt_Loc;
  540. Enumeration Enum_Loc;
  541. Int_Loc = *Int_Par_Ref + 10;
  542. do /* executed once */
  543. if (Ch_1_Glob == 'A')
  544. /* then, executed */
  545. {
  546. Int_Loc -= 1;
  547. *Int_Par_Ref = Int_Loc - Int_Glob;
  548. Enum_Loc = Ident_1;
  549. } /* if */
  550. while (Enum_Loc != Ident_1); /* true */
  551. } /* Proc_2 */
  552. void Proc_3 (Rec_Pointer *Ptr_Ref_Par)
  553. /******************/
  554. /* executed once */
  555. /* Ptr_Ref_Par becomes Ptr_Glob */
  556. {
  557. if (Ptr_Glob != Null)
  558. /* then, executed */
  559. *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp;
  560. Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp);
  561. } /* Proc_3 */
  562. void Proc_4 () /* without parameters */
  563. /*******/
  564. /* executed once */
  565. {
  566. Boolean Bool_Loc;
  567. Bool_Loc = Ch_1_Glob == 'A';
  568. Bool_Glob = Bool_Loc | Bool_Glob;
  569. Ch_2_Glob = 'B';
  570. } /* Proc_4 */
  571. void Proc_5 () /* without parameters */
  572. /*******/
  573. /* executed once */
  574. {
  575. Ch_1_Glob = 'A';
  576. Bool_Glob = false;
  577. } /* Proc_5 */
  578. /* Procedure for the assignment of structures, */
  579. /* if the C compiler doesn't support this feature */
  580. #ifdefNOSTRUCTASSIGN
  581. memcpy (d, s, l)
  582. register char *d;
  583. register char *s;
  584. register int l;
  585. {
  586. while (l--) *d++ = *s++;
  587. }
  588. #endif
复制代码

dhry_2.c


  1. /*
  2. *************************************************************************
  3. *
  4. * "DHRYSTONE" Benchmark Program
  5. * -----------------------------
  6. *
  7. *Version: C, Version 2.1
  8. *
  9. *File: dhry_2.c (part 3 of 3)
  10. *
  11. *Date: May 25, 1988
  12. *
  13. *Author: Reinhold P. Weicker
  14. *
  15. *************************************************************************
  16. */
  17. #include "dhry.h"
  18. #ifndef REG
  19. #define REG
  20. /* REG becomes defined as empty */
  21. /* i.e. no register variables */
  22. #else
  23. #define REG register
  24. #endif
  25. externint Int_Glob;
  26. externchar Ch_1_Glob;
  27. Boolean Func_3 (Enumeration Enum_Par_Val);
  28. void Proc_6 (Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par)
  29. /*********************************/
  30. /* executed once */
  31. /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
  32. {
  33. *Enum_Ref_Par = Enum_Val_Par;
  34. if (! Func_3 (Enum_Val_Par))
  35. /* then, not executed */
  36. *Enum_Ref_Par = Ident_4;
  37. switch (Enum_Val_Par)
  38. {
  39. case Ident_1:
  40. *Enum_Ref_Par = Ident_1;
  41. break;
  42. case Ident_2:
  43. if (Int_Glob > 100)
  44. /* then */
  45. *Enum_Ref_Par = Ident_1;
  46. else *Enum_Ref_Par = Ident_4;
  47. break;
  48. case Ident_3: /* executed */
  49. *Enum_Ref_Par = Ident_2;
  50. break;
  51. case Ident_4: break;
  52. case Ident_5:
  53. *Enum_Ref_Par = Ident_3;
  54. break;
  55. } /* switch */
  56. } /* Proc_6 */
  57. void Proc_7 (One_Fifty Int_1_Par_Val, One_Fifty Int_2_Par_Val,
  58. One_Fifty *Int_Par_Ref)
  59. /**********************************************/
  60. /* executed three times */
  61. /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3,*/
  62. /* Int_Par_Ref becomes 7 */
  63. /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
  64. /* Int_Par_Ref becomes 17 */
  65. /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
  66. /* Int_Par_Ref becomes 18 */
  67. {
  68. One_Fifty Int_Loc;
  69. Int_Loc = Int_1_Par_Val + 2;
  70. *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
  71. } /* Proc_7 */
  72. void Proc_8 (Arr_1_Dim Arr_1_Par_Ref, Arr_2_Dim Arr_2_Par_Ref,
  73. int Int_1_Par_Val, int Int_2_Par_Val)
  74. /*********************************************************************/
  75. /* executed once */
  76. /* Int_Par_Val_1 == 3 */
  77. /* Int_Par_Val_2 == 7 */
  78. {
  79. REG One_Fifty Int_Index;
  80. REG One_Fifty Int_Loc;
  81. Int_Loc = Int_1_Par_Val + 5;
  82. Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
  83. Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
  84. Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
  85. for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index)
  86. Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc;
  87. Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
  88. Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc];
  89. Int_Glob = 5;
  90. } /* Proc_8 */
  91. Enumeration Func_1 (Capital_Letter Ch_1_Par_Val,
  92. Capital_Letter Ch_2_Par_Val)
  93. /*************************************************/
  94. /* executed three times */
  95. /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */
  96. /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */
  97. /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */
  98. {
  99. Capital_Letter Ch_1_Loc;
  100. Capital_Letter Ch_2_Loc;
  101. Ch_1_Loc = Ch_1_Par_Val;
  102. Ch_2_Loc = Ch_1_Loc;
  103. if (Ch_2_Loc != Ch_2_Par_Val)
  104. /* then, executed */
  105. return (Ident_1);
  106. else/* not executed */
  107. {
  108. Ch_1_Glob = Ch_1_Loc;
  109. return (Ident_2);
  110. }
  111. } /* Func_1 */
  112. Boolean Func_2 (Str_30 Str_1_Par_Ref, Str_30 Str_2_Par_Ref)
  113. /*************************************************/
  114. /* executed once */
  115. /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */
  116. /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */
  117. {
  118. REG One_Thirty Int_Loc;
  119. Capital_Letter Ch_Loc;
  120. Int_Loc = 2;
  121. while (Int_Loc <= 2) /* loop body executed once */
  122. if (Func_1 (Str_1_Par_Ref[Int_Loc],
  123. Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
  124. /* then, executed */
  125. {
  126. Ch_Loc = 'A';
  127. Int_Loc += 1;
  128. } /* if, while */
  129. if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
  130. /* then, not executed */
  131. Int_Loc = 7;
  132. if (Ch_Loc == 'R')
  133. /* then, not executed */
  134. return (true);
  135. else /* executed */
  136. {
  137. if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
  138. /* then, not executed */
  139. {
  140. Int_Loc += 7;
  141. Int_Glob = Int_Loc;
  142. return (true);
  143. }
  144. else /* executed */
  145. return (false);
  146. } /* if Ch_Loc */
  147. } /* Func_2 */
  148. Boolean Func_3 (Enumeration Enum_Par_Val)
  149. /***************************/
  150. /* executed once */
  151. /* Enum_Par_Val == Ident_3 */
  152. {
  153. Enumeration Enum_Loc;
  154. Enum_Loc = Enum_Par_Val;
  155. if (Enum_Loc == Ident_3)
  156. /* then, executed */
  157. return (true);
  158. else /* not executed */
  159. return (false);
  160. } /* Func_3 */
复制代码

dhry.h


  1. /*
  2. **************************************************************************
  3. * DHRYSTONE 2.1 BENCHMARK PC VERSION
  4. **************************************************************************
  5. *
  6. * "DHRYSTONE" Benchmark Program
  7. * -----------------------------
  8. *
  9. *Version: C, Version 2.1
  10. *
  11. *File: dhry.h (part 1 of 3)
  12. *
  13. *Date: May 25, 1988
  14. *
  15. *Author: Reinhold P. Weicker
  16. * Siemens AG, AUT E 51
  17. * Postfach 3220
  18. * 8520 Erlangen
  19. * Germany (West)
  20. * Phone:[+49]-9131-7-20330
  21. * (8-17 Central European Time)
  22. * Usenet: ..!mcsun!unido!estevax!weicker
  23. *
  24. * Original Version (in Ada) published in
  25. * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
  26. * pp. 1013 - 1030, together with the statistics
  27. * on which the distribution of statements etc. is based.
  28. *
  29. * In this C version, the following C library functions are used:
  30. * - strcpy, strcmp (inside the measurement loop)
  31. * - printf, scanf (outside the measurement loop)
  32. * In addition, Berkeley UNIX system calls "times ()" or "time ()"
  33. * are used for execution time measurement. For measurements
  34. * on other systems, these calls have to be changed.
  35. *
  36. *Collection of Results:
  37. * Reinhold Weicker (address see above) and
  38. *
  39. * Rick Richardson
  40. * PC Research. Inc.
  41. * 94 Apple Orchard Drive
  42. * Tinton Falls, NJ 07724
  43. * Phone:(201) 389-8963 (9-17 EST)
  44. * Usenet: ...!uunet!pcrat!rick
  45. *
  46. * Please send results to Rick Richardson and/or Reinhold Weicker.
  47. * Complete information should be given on hardware and software used.
  48. * Hardware information includes: Machine type, CPU, type and size
  49. * of caches; for microprocessors: clock frequency, memory speed
  50. * (number of wait states).
  51. * Software information includes: Compiler (and runtime library)
  52. * manufacturer and version, compilation switches, OS version.
  53. * The Operating System version may give an indication about the
  54. * compiler; Dhrystone itself performs no OS calls in the measurement
  55. * loop.
  56. *
  57. * The complete output generated by the program should be mailed
  58. * such that at least some checks for correctness can be made.
  59. *
  60. **************************************************************************
  61. *
  62. *This version has changes made by Roy Longbottom to conform to a common
  63. *format for a series of standard benchmarks for PCs:
  64. *
  65. *Running time greater than 5 seconds due to inaccuracy of the PC clock.
  66. *
  67. *Automatic adjustment of run time, no manually inserted parameters.
  68. *
  69. *Initial display of calibration times to confirm linearity.
  70. *
  71. *Display of results within one screen (or at a slow speed as the test
  72. *progresses) so that it can be seen to have run successfully.
  73. *
  74. *Facilities to type in details of system used etc.
  75. *
  76. *All results and details appended to a results file.
  77. *
  78. *
  79. *Roy Longbottom
  80. *101323.2241@compuserve.com
  81. *
  82. **************************************************************************
  83. *
  84. *For details of history, changes, other defines, benchmark construction
  85. *statistics see official versions from ftp.nosc.mil/pub/aburto where
  86. *the latest table of results (dhry.tbl) are available. See also
  87. *netlib@ornl.gov
  88. *
  89. **************************************************************************
  90. *
  91. * Defines: The following "Defines" are possible:
  92. * -DREG=register (default: Not defined)
  93. * As an approximation to what an average C programmer
  94. * might do, the "register" storage class is applied
  95. * (if enabled by -DREG=register)
  96. * - for local variables, if they are used (dynamically)
  97. * five or more times
  98. * - for parameters if they are used (dynamically)
  99. * six or more times
  100. * Note that an optimal "register" strategy is
  101. * compiler-dependent, and that "register" declarations
  102. * do not necessarily lead to faster execution.
  103. * -DNOSTRUCTASSIGN (default: Not defined)
  104. * Define if the C compiler does not support
  105. * assignment of structures.
  106. * -DNOENUMS (default: Not defined)
  107. * Define if the C compiler does not support
  108. * enumeration types.
  109. ***************************************************************************
  110. *
  111. *Compilation model and measurement (IMPORTANT):
  112. *
  113. *This C version of Dhrystone consists of three files:
  114. *- dhry.h (this file, containing global definitions and comments)
  115. *- dhry_1.c (containing the code corresponding to Ada package Pack_1)
  116. *- dhry_2.c (containing the code corresponding to Ada package Pack_2)
  117. *
  118. *The following "ground rules" apply for measurements:
  119. *- Separate compilation
  120. *- No procedure merging
  121. *- Otherwise, compiler optimizations are allowed but should be indicated
  122. *- Default results are those without register declarations
  123. *See the companion paper "Rationale for Dhrystone Version 2" for a more
  124. *detailed discussion of these ground rules.
  125. *
  126. *For 16-Bit processors (e.g. 80186, 80286), times for all compilation
  127. *models ("small", "medium", "large" etc.) should be given if possible,
  128. *together with a definition of these models for the compiler system used.
  129. *
  130. **************************************************************************
  131. * Examples of Pentium Results
  132. *
  133. * Dhrystone BenchmarkVersion 2.1 (Language: C)
  134. *
  135. * Month run 4/1996
  136. * PC model Escom
  137. * CPU Pentium
  138. * Clock MHz 100
  139. * Cache 256K
  140. * Options Neptune chipset
  141. * OS/DOS Windows 95
  142. * Compiler Watcom C/ C++ 10.5 Win386
  143. * OptLevel -otexan -zp8 -fp5 -5r
  144. * Run by Roy Longbottom
  145. * From UK
  146. * Mail 101323.2241@compuserve.com
  147. *
  148. * Final values (* implementation-dependent):
  149. *
  150. * Int_Glob: O.K.5
  151. * Bool_Glob: O.K.1
  152. * Ch_1_Glob: O.K.A
  153. * Ch_2_Glob: O.K.B
  154. * Arr_1_Glob[8]: O.K.7
  155. * Arr_2_Glob8/7: O.K. 1600010
  156. * Ptr_Glob->
  157. * Ptr_Comp: *98008
  158. * Discr: O.K.0
  159. * Enum_Comp: O.K.2
  160. * Int_Comp: O.K.17
  161. * Str_Comp: O.K.DHRYSTONE PROGRAM, SOME STRING
  162. * Next_Ptr_Glob->
  163. * Ptr_Comp: *98008 same as above
  164. * Discr: O.K.0
  165. * Enum_Comp: O.K.1
  166. * Int_Comp: O.K.18
  167. * Str_Comp: O.K.DHRYSTONE PROGRAM, SOME STRING
  168. * Int_1_Loc: O.K.5
  169. * Int_2_Loc: O.K.13
  170. * Int_3_Loc: O.K.7
  171. * Enum_Loc: O.K.1
  172. * Str_1_Loc: O.K.DHRYSTONE PROGRAM, 1'ST STRING
  173. * Str_2_Loc: O.K.DHRYSTONE PROGRAM, 2'ND STRING
  174. *
  175. * Register option Selected.
  176. *
  177. * Microseconds 1 loop: 4.53
  178. * Dhrystones / second: 220690
  179. * VAX MIPS rating: 125.61
  180. *
  181. *
  182. * Dhrystone BenchmarkVersion 2.1 (Language: C)
  183. *
  184. * Month run 4/1996
  185. * PC model Escom
  186. * CPU Pentium
  187. * Clock MHz 100
  188. * Cache 256K
  189. * Options Neptune chipset
  190. * OS/DOS Windows 95
  191. * Compiler Watcom C/ C++ 10.5 Win386
  192. * OptLevel No optimisation
  193. * Run by Roy Longbottom
  194. * From UK
  195. * Mail 101323.2241@compuserve.com
  196. *
  197. * Final values (* implementation-dependent):
  198. *
  199. * Int_Glob: O.K.5
  200. * Bool_Glob: O.K.1
  201. * Ch_1_Glob: O.K.A
  202. * Ch_2_Glob: O.K.B
  203. * Arr_1_Glob[8]: O.K.7
  204. * Arr_2_Glob8/7: O.K. 320010
  205. * Ptr_Glob->
  206. * Ptr_Comp: *98004
  207. * Discr: O.K.0
  208. * Enum_Comp: O.K.2
  209. * Int_Comp: O.K.17
  210. * Str_Comp: O.K.DHRYSTONE PROGRAM, SOME STRING
  211. * Next_Ptr_Glob->
  212. * Ptr_Comp: *98004 same as above
  213. * Discr: O.K.0
  214. * Enum_Comp: O.K.1
  215. * Int_Comp: O.K.18
  216. * Str_Comp: O.K.DHRYSTONE PROGRAM, SOME STRING
  217. * Int_1_Loc: O.K.5
  218. * Int_2_Loc: O.K.13
  219. * Int_3_Loc: O.K.7
  220. * Enum_Loc: O.K.1
  221. * Str_1_Loc: O.K.DHRYSTONE PROGRAM, 1'ST STRING
  222. * Str_2_Loc: O.K.DHRYSTONE PROGRAM, 2'ND STRING
  223. *
  224. * Register option Not selected.
  225. *
  226. * Microseconds 1 loop: 20.06
  227. * Dhrystones / second: 49844
  228. * VAX MIPS rating: 28.37
  229. *
  230. **************************************************************************
  231. */
  232. /* Compiler and system dependent definitions: */
  233. #ifndef TIME
  234. #define TIMES
  235. #endif
  236. /* Use times(2) time function unless */
  237. /* explicitly defined otherwise */
  238. #ifdef TIMES
  239. /* #include
  240. #include*/
  241. /* for "times" */
  242. #endif
  243. #define Mic_secs_Per_Second 1000000.0
  244. /* Berkeley UNIX C returns process times in seconds/HZ */
  245. #ifdefNOSTRUCTASSIGN
  246. #define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
  247. #else
  248. #define structassign(d, s) d = s
  249. #endif
  250. #ifdefNOENUM
  251. #define Ident_1 0
  252. #define Ident_2 1
  253. #define Ident_3 2
  254. #define Ident_4 3
  255. #define Ident_5 4
  256. typedef int Enumeration;
  257. #else
  258. typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
  259. Enumeration;
  260. #endif
  261. /* for boolean and enumeration types in Ada, Pascal */
  262. /* General definitions: */
  263. #include
  264. #include
  265. /* for strcpy, strcmp */
  266. #define Null 0
  267. /* Value of a Null pointer */
  268. #define true1
  269. #define false 0
  270. typedef int One_Thirty;
  271. typedef int One_Fifty;
  272. typedef char Capital_Letter;
  273. typedef int Boolean;
  274. typedef char Str_30 [31];
  275. typedef int Arr_1_Dim [50];
  276. typedef int Arr_2_Dim [50] [50];
  277. typedef struct record
  278. {
  279. struct record *Ptr_Comp;
  280. Enumeration Discr;
  281. union {
  282. struct {
  283. Enumeration Enum_Comp;
  284. int Int_Comp;
  285. char Str_Comp [31];
  286. } var_1;
  287. struct {
  288. Enumeration E_Comp_2;
  289. char Str_2_Comp [31];
  290. } var_2;
  291. struct {
  292. char Ch_1_Comp;
  293. char Ch_2_Comp;
  294. } var_3;
  295. } variant;
  296. } Rec_Type, *Rec_Pointer;
复制代码


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16608

    浏览量

    347188
  • 先楫半导体
    +关注

    关注

    9

    文章

    214

    浏览量

    1954
收藏 人收藏

    评论

    相关推荐

    有奖提问!半导体HPM6E00系列新品发布会!!

    半导体HPM6E00新品预览”的活动,盛况空前。 自此之后直收到大家的信息,问什么时候能够买到HPM6E00,这不,我们来了~
    发表于 06-20 11:45

    半导体 hpm_sdk v1.5.0 正式发布

    半导体 hpm_sdk v1.5.0 正式发布!功能升级更强大 版本更新概况 新支持的IDE IAR Embedded Workbench for RISC-V (
    发表于 04-08 11:14

    HPM5361EVK开发,网友测评效果(二)

    上海半导体举办的HPM5361EVK开发试用活动圆满结束,广大工程师和爱好者们踊跃参与此次
    的头像 发表于 03-12 08:16 1283次阅读
    <b class='flag-5'>先</b><b class='flag-5'>楫</b><b class='flag-5'>HPM</b>5361EVK开发<b class='flag-5'>板</b>,网友测评效果(二)

    半导体HPM5300EVK开发试用作品手册免费下载

    产品介绍: HPM5300系列MCU是上海半导体推出的款高性能RISC-V内核通用微控制
    发表于 12-28 10:25

    HPM5361EVK开发试用体验】HPM5361EVK开发初体验

    HPM5361EVK是基于HPM5300系列高性能RISC-V内核MCU的款开发
    发表于 12-24 22:58

    HPM5361EVK开发试用体验】认识和了解HPM5361EVK开发

    近日,收到了HPM5361EVK开发开发,带大家了解和认识
    发表于 12-24 22:39

    HPM5361EVK开发试用体验】HPM5361性能初测

    Dhrystone。其他方面的性能测试后续将陆续进行。 2、HPM5361 CoreMark测试
    发表于 12-21 15:07

    HPM5361EVK开发试用体验】性能测试基准---Dhrystone (3)

    工具。 Dhrystone基准测试程序主要用于衡量计算机处理器的整数运算性能。它通过测量
    发表于 12-20 22:14

    HPM5361EVK开发试用体验】03 - HPM5361性能初测

    Dhrystone。其他方面的性能测试后续将陆续进行。 2、HPM5361 CoreMark测试
    发表于 12-12 20:10

    HPM5361EVK开发试用体验】-- HPM5361初体验

    cortex-m7级别的芯片国产直有传说未见身影,奈何只能接受国外品牌漫长的交期和次次的涨价。 有幸大概在2022年意外接触到了半导体
    发表于 11-29 11:26

    HPM5361EVK开发试用体验】1上手HPM5361

    在深入了解半导体和RISC-V开发工具的过程中,我深感其产品的卓越性能和技术的先进性。以下是我对此次学习的几点体会: 技术领先,产品卓越
    发表于 11-28 12:18

    半导体发布多个系列高性能微控制器产品

    HPM6000 系列 MCU 是来自上海半导体科技有限公司的高性能实时 RISC-V 微控制器,为工业自动化及边缘
    的头像 发表于 11-28 09:38 536次阅读

    想找半导体HPM6750 使用linux剪裁操作系统的例程

    想找半导体HPM6750 使用linux剪裁操作系统的例程,SDK里给了FREERT的,没有LINUX的。哪里可以下载的到?
    发表于 10-25 16:18

    【新品体验】HPM5361EVK开发免费试用

    形式:标题格式 【HPM5361EVK开发试用体验】+自拟标题 ;视频演示可分为:应用演示视频、调试演示视频。 3、
    发表于 10-20 11:30

    半导体HPM5361EVK开发开发资料免费下载

    调试器。 HPM5300系列MCU是上海半导体推出的款高性能RISC-V内核通用微控制器
    发表于 10-20 11:21