66#define MODULE_NAME "benchmark"
77#define bfdev_log_fmt (fmt ) MODULE_NAME ": " fmt
88
9- #include <bfdev/log.h>
9+ #include <stdio.h>
10+ #include <errno.h>
11+ #include <bfdev.h>
12+
13+ #include "main.h"
1014#include "py32f0xx_hal.h"
1115
1216UART_HandleTypeDef huart1 ;
17+ IWDG_HandleTypeDef hiwgd ;
18+
1319extern int crc_benchmark (void );
1420extern int rbtree_benchmark (void );
21+ extern int mpi_benchmark (void );
1522
1623int __io_putchar (int ch )
1724{
@@ -21,17 +28,27 @@ int __io_putchar(int ch)
2128 return ch ;
2229}
2330
31+ void _exit (int status )
32+ {
33+ printf ("Benchmark panic: (%d)\n" , errno );
34+ for (;;)
35+ iwdg_touch ();
36+ }
37+
2438int main (void )
2539{
2640 RCC_OscInitTypeDef OscInitType = {};
2741 RCC_ClkInitTypeDef ClkInitType = {};
2842 GPIO_InitTypeDef GPIOInitType = {};
43+ const char * errinfo ;
44+ int retval ;
2945
3046 HAL_Init ();
3147
32- OscInitType .OscillatorType = RCC_OSCILLATORTYPE_HSI ;
48+ OscInitType .OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI ;
3349 OscInitType .HSICalibrationValue = RCC_HSICALIBRATION_24MHz ;
3450 OscInitType .HSIState = RCC_HSI_ON ;
51+ OscInitType .LSIState = RCC_LSI_ON ;
3552 OscInitType .HSIDiv = RCC_HSI_DIV1 ;
3653 OscInitType .PLL .PLLState = RCC_PLL_ON ;
3754 OscInitType .PLL .PLLSource = RCC_PLLSOURCE_HSI ;
@@ -51,21 +68,64 @@ int main(void)
5168 __HAL_RCC_GPIOA_CLK_ENABLE ();
5269 HAL_GPIO_Init (GPIOA , & GPIOInitType );
5370
71+ GPIOInitType .Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3 ;
72+ GPIOInitType .Mode = GPIO_MODE_OUTPUT_PP ;
73+ __HAL_RCC_GPIOB_CLK_ENABLE ();
74+ HAL_GPIO_Init (GPIOB , & GPIOInitType );
75+
5476 huart1 .Instance = USART1 ;
5577 huart1 .Init .BaudRate = 115200 ;
5678 huart1 .Init .Mode = UART_MODE_TX_RX ;
5779 __HAL_RCC_USART1_CLK_ENABLE ();
5880 HAL_UART_Init (& huart1 );
5981
82+ hiwgd .Instance = IWDG ;
83+ hiwgd .Init .Prescaler = IWDG_PRESCALER_32 ;
84+ hiwgd .Init .Reload = 1500 ;
85+ HAL_IWDG_Init (& hiwgd );
86+
6087 bfdev_log_info ("Benchmark for PY32F0xx.\n" );
6188 bfdev_log_info ("Bfdev version: %s\n" , __bfdev_stringify (BFDEV_VERSION ));
6289 bfdev_log_info ("This may take a few minutes...\n" );
63-
6490 puts ("" ); /* '\n' */
65- crc_benchmark ();
6691
67- puts ("" ); /* '\n' */
68- rbtree_benchmark ();
92+ for (;;) {
93+ iwdg_touch ();
94+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_3 , GPIO_PIN_RESET );
95+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_1 , GPIO_PIN_SET );
96+
97+ retval = crc_benchmark ();
98+ if (retval ) {
99+ bfdev_errname (retval , & errinfo );
100+ printf ("error %d: %s\n" , retval , errinfo );
101+ abort ();
102+ }
103+ puts ("" ); /* '\n' */
104+
105+ iwdg_touch ();
106+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_1 , GPIO_PIN_RESET );
107+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_0 , GPIO_PIN_SET );
108+
109+ retval = rbtree_benchmark ();
110+ if (retval ) {
111+ bfdev_errname (retval , & errinfo );
112+ printf ("error %d: %s\n" , retval , errinfo );
113+ abort ();
114+ }
115+ puts ("" ); /* '\n' */
116+
117+ iwdg_touch ();
118+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_0 , GPIO_PIN_RESET );
119+ HAL_GPIO_WritePin (GPIOB , GPIO_PIN_3 , GPIO_PIN_SET );
120+
121+ retval = mpi_benchmark ();
122+ if (retval ) {
123+ bfdev_errname (retval , & errinfo );
124+ printf ("error %d: %s\n" , retval , errinfo );
125+ abort ();
126+ }
127+ puts ("" ); /* '\n' */
128+ }
69129
70130 return 0 ;
71131}
0 commit comments