配置
1. cubeAI 生成代码设置好串口后,不需要再进行输出重定向
下载成功后打印调试信息
接下来可以将打印调试信息的函数注释掉
自定义模型输入
#include "ai_datatypes_defines.h"#include "ai_platform.h"#include "network.h"#include "network_data.h"#include "stdio.h"#include "arm_math.h"/* USER CODE BEGIN PTD */float aiInData[5][AI_NETWORK_IN_1_SIZE]={{5.6, 2.5, 3.9, 1.1},{6.3, 3.3, 4.7, 1.6},{6.7, 3.3, 5.7, 2.5},{6.0, 2.2, 5.0, 1.5},{6.7, 2.5, 5.8, 1.8}};ai_handle network;float aiOutData[AI_NETWORK_OUT_1_SIZE];uint8_t activations[AI_NETWORK_DATA_ACTIVATIONS_SIZE];
初始化模型
/* 模型初始化 */void net_Init(ai_handle w_addr, ai_handle act_addr){ai_error err;err = ai_network_create(&network, AI_NETWORK_DATA_CONFIG);if (err.type != AI_ERROR_NONE) {printf("???? - code=%d code=%d\r\n", err.type, err.code);Error_Handler();}const ai_network_params params = AI_NETWORK_PARAMS_INIT(AI_NETWORK_DATA_WEIGHTS(w_addr),AI_NETWORK_DATA_ACTIVATIONS(act_addr));if (!ai_network_init(network, ¶ms)) {err = ai_network_get_error(network);printf("初始化失败 - code=%d code=%d\r\n", err.type, err.code);Error_Handler();}}/* 模型运行 */void net_Run(float *pIn, float *pOut){ai_i32 batch;ai_error err;ai_buffer ai_input[AI_NETWORK_IN_NUM] = AI_NETWORK_IN;ai_buffer ai_output[AI_NETWORK_OUT_NUM] = AI_NETWORK_OUT;ai_input[0].n_batches = 1;ai_input[0].data = AI_HANDLE_PTR(pIn);ai_output[0].n_batches = 1;ai_output[0].data = AI_HANDLE_PTR(pOut);batch = ai_network_run(network, ai_input, ai_output);if (batch != 1) {err = ai_network_get_error(network);printf("运行失败 - code=%d code=%d\r\n", err.type, err.code);Error_Handler();}}
模型推理
printf("start testing!!!\r\n");//uint8_t correct=0;net_Init(ai_network_data_weights_get(), activations);__HAL_TIM_SetCounter(&htim4,0);HAL_TIM_Base_Start(&htim4);int i=0;for(i=0;i<2;i++){net_Run(aiInData[i],aiOutData);}int count_ms=__HAL_TIM_GET_COUNTER(&htim4);HAL_TIM_Base_Stop(&htim4);int j;for(j=0;j<4;j++){printf("%.3f ",aiOutData[j]);}printf("done\r\n");printf("computing done\r\n");printf("run 6 times cost:%d\r\n",count_ms);
