算法收藏-C语言版

获得一个随机数(min~max)

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/**
  * @brief  获得一个随机数
  * @param  None
  * @retval	None
 */
static uint32_t rand_num_create(uint32_t min,uint32_t max)
{
    uint32_t rand_num = 0;
    srand((int)time(0));
    rand_num = min + rand()%( max - min + 1);
    return rand_num;
}

Printf函数封装(打印可变参数)

#include <stdio.h>
#include <string.h>
#include <stdarg.h>                 // 可变参数头文件
#include "bsp_dma_uart.h"
/**
  *@brief 串口1,DMA不定长发送函数
  *@param fmt:需要发送变量
  *@return 使用方法同printf
*/
void bsp_debug_printf(char *fmt, ...)
{
    char printf_buf[USART1_DMA_TX_LENTH] = {0};
	va_list args;
	va_start(args, fmt);
	vsnprintf(printf_buf,USART1_DMA_TX_LENTH, fmt, args);       //打印不超过USART1_DMA_TX_LENTH
    
    
	int i = 0,j = 0;

    while(t_usart1_data_value.Tx_Dma_Busy_Flag && (j < 50000)){j++;}            /*等待DMA空闲*/
    while((DMA_GetFlagStatus(DMA1_FLAG_TC4) != RESET)&&(i < 50000) ){i++;}	

    t_usart1_data_value.Tx_Dma_Busy_Flag = 1;                                   /*置位dma忙标志*/
    memcpy(t_usart1_data_value.Usart1_Tx_Buf, printf_buf, strlen(printf_buf));	/*复制发送数据*/
    DMA_SetCurrDataCounter(DMA1_Channel4, strlen(printf_buf));		            /*设置传输数据长度*/
    DMA_Cmd(DMA1_Channel4, ENABLE);							                    /*打开DMA开始发送*/		
	
}
bsp_debug_printf("data_len:%d\r\n",t_rs485_buff.data_len);

数字转字符串算法

/**
  *@brief 将10进制数字转换为字符串
  *@param num 10进制数字  data 转换后字符串
  *@return None
  *@note  data的空间要足够(> 数字位数)
*/
void app_misc_num_to_string(unsigned long int num,unsigned char *data )
{
	 int i = 0;
	 unsigned char *save_data = data;
	 while(num > 0)
	 {
		 *data = num%10 + 48;
		  data++;
		  i++;
		  num = num/10;
	 }  
	 for(unsigned int j = 0;j < i/2;j++)
	 {
		unsigned char tmp_char;
		tmp_char = *(save_data + j);
		*(save_data + j) = *(data-1-j);
		*(data-1-j) = tmp_char;
	 }
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页