mirror of
				https://github.com/IcedRooibos/py32f0-template.git
				synced 2025-10-31 01:42:04 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			135 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "py32f0xx_bsp_printf.h"
 | |
| #include "arm_math.h"
 | |
| 
 | |
| #define USE_STATIC_INIT
 | |
| 
 | |
|  /* Global defines */
 | |
| 
 | |
| #define TEST_LENGTH_SAMPLES   (20*4)
 | |
| 
 | |
| /* List of Marks scored by 20 students for 4 subjects */
 | |
| const float32_t testMarks_f32[TEST_LENGTH_SAMPLES] =
 | |
| {
 | |
|   42.000000,  37.000000,  81.000000,  28.000000,
 | |
|   83.000000,  72.000000,  36.000000,  38.000000,
 | |
|   32.000000,  51.000000,  63.000000,  64.000000,
 | |
|   97.000000,  82.000000,  95.000000,  90.000000,
 | |
|   66.000000,  51.000000,  54.000000,  42.000000,
 | |
|   67.000000,  56.000000,  45.000000,  57.000000,
 | |
|   67.000000,  69.000000,  35.000000,  52.000000,
 | |
|   29.000000,  81.000000,  58.000000,  47.000000,
 | |
|   38.000000,  76.000000, 100.000000,  29.000000,
 | |
|   33.000000,  47.000000,  29.000000,  50.000000,
 | |
|   34.000000,  41.000000,  61.000000,  46.000000,
 | |
|   52.000000,  50.000000,  48.000000,  36.000000,
 | |
|   47.000000,  55.000000,  44.000000,  40.000000,
 | |
|  100.000000,  94.000000,  84.000000,  37.000000,
 | |
|   32.000000,  71.000000,  47.000000,  77.000000,
 | |
|   31.000000,  50.000000,  49.000000,  35.000000,
 | |
|   63.000000,  67.000000,  40.000000,  31.000000,
 | |
|   29.000000,  68.000000,  61.000000,  38.000000,
 | |
|   31.000000,  28.000000,  28.000000,  76.000000,
 | |
|   55.000000,  33.000000,  29.000000,  39.000000
 | |
| };
 | |
| 
 | |
| 
 | |
| /* Number of subjects X 1 */
 | |
| const float32_t testUnity_f32[4] =
 | |
| {
 | |
|   1.000,  1.000,   1.000,  1.000
 | |
| };
 | |
| 
 | |
| 
 | |
| /* f32 Output buffer */
 | |
| static float32_t testOutput[TEST_LENGTH_SAMPLES];
 | |
| 
 | |
| 
 | |
| /* Global defines */
 | |
| #define   NUMSTUDENTS  20
 | |
| #define   NUMSUBJECTS  4
 | |
| 
 | |
| /* Global variables */
 | |
| 
 | |
| uint32_t    numStudents = 20;
 | |
| uint32_t    numSubjects = 4;
 | |
| float32_t   max_marks, min_marks, mean, std, var;
 | |
| uint32_t    student_num;
 | |
| 
 | |
| 
 | |
| 
 | |
| int main(void)
 | |
| {
 | |
|   uint32_t i;
 | |
| 
 | |
|   HAL_Init();                                 
 | |
| 
 | |
|   BSP_USART_Config();
 | |
| 
 | |
|   #ifndef  USE_STATIC_INIT
 | |
| 
 | |
|   arm_matrix_instance_f32 srcA;
 | |
|   arm_matrix_instance_f32 srcB;
 | |
|   arm_matrix_instance_f32 dstC;
 | |
| 
 | |
|   /* Input and output matrices initializations */
 | |
|   arm_mat_init_f32(&srcA, numStudents, numSubjects, (float32_t *)testMarks_f32);
 | |
|   arm_mat_init_f32(&srcB, numSubjects, 1, (float32_t *)testUnity_f32);
 | |
|   arm_mat_init_f32(&dstC, numStudents, 1, testOutput);
 | |
| 
 | |
| #else
 | |
| 
 | |
|   /* Static Initializations of Input and output matrix sizes and array */
 | |
|   arm_matrix_instance_f32 srcA = {NUMSTUDENTS, NUMSUBJECTS, (float32_t *)testMarks_f32};
 | |
|   arm_matrix_instance_f32 srcB = {NUMSUBJECTS, 1, (float32_t *)testUnity_f32};
 | |
|   arm_matrix_instance_f32 dstC = {NUMSTUDENTS, 1, testOutput};
 | |
| 
 | |
| #endif
 | |
| 
 | |
|   /* Call the Matrix multiplication process function */
 | |
|   arm_mat_mult_f32(&srcA, &srcB, &dstC);
 | |
|   for (i = 0; i < 20; i++)
 | |
|   {
 | |
|     printf("%f ", *(testOutput + i));
 | |
|   }
 | |
|   printf("\r\n");
 | |
| 
 | |
|   /* Call the Max function to calculate max marks among numStudents */
 | |
|   arm_max_f32(testOutput, numStudents, &max_marks, &student_num);
 | |
| 
 | |
|   /* Call the Min function to calculate min marks among numStudents */
 | |
|   arm_min_f32(testOutput, numStudents, &min_marks, &student_num);
 | |
| 
 | |
|   /* Call the Mean function to calculate mean */
 | |
|   arm_mean_f32(testOutput, numStudents, &mean);
 | |
| 
 | |
|   /* Call the std function to calculate standard deviation */
 | |
|   arm_std_f32(testOutput, numStudents, &std);
 | |
| 
 | |
|   /* Call the var function to calculate variance */
 | |
|   arm_var_f32(testOutput, numStudents, &var);
 | |
| 
 | |
|   printf("max_marks = %f\r\nmin_marks = %f\r\nmean = %f\r\nstd = %f\r\nvar = %f\r\n", max_marks, min_marks, mean, std, var);
 | |
| 
 | |
| 
 | |
|   while (1)
 | |
|   {
 | |
|     HAL_Delay(1000);                            
 | |
|     printf("echo\r\n");
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| void APP_ErrorHandler(void)
 | |
| {
 | |
|   while (1);
 | |
| }
 | |
| 
 | |
| #ifdef  USE_FULL_ASSERT
 | |
| 
 | |
| void assert_failed(uint8_t *file, uint32_t line)
 | |
| {
 | |
|   /* Error printing, e.g. printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
 | |
|   while (1);
 | |
| }
 | |
| #endif /* USE_FULL_ASSERT */
 | 
