shooter/User/lib/calc_lib.c
2025-03-26 14:54:23 +08:00

125 lines
2.1 KiB
C

#include "calc_lib.h"
//??
void user_delay_us(uint16_t us)
{
for(; us > 0; us--)
{
for(uint8_t i = 50; i > 0; i--)
{
;
}
}
}
//??
void user_delay_ms(uint16_t ms)
{
for(; ms > 0; ms--)
{
user_delay_us(1000);
}
}
//??????????????????
void abs_limit_fp(fp32 *num, fp32 Limit)
{
if (*num > Limit)
{
*num = Limit;
}
else if (*num < -Limit)
{
*num = -Limit;
}
}
//??????????????????
void abs_limit_int(int64_t *num, int64_t Limit)
{
if (*num > Limit)
{
*num = Limit;
}
else if (*num < -Limit)
{
*num = -Limit;
}
}
//?????? Input ??? minValue ? maxValue ??
fp32 loop_fp32_constrain(fp32 Input, fp32 minValue, fp32 maxValue)
{
if (maxValue < minValue)
{
return Input;
}
if (Input > maxValue)
{
fp32 len = maxValue - minValue;
while (Input > maxValue)
{
Input -= len;
}
}
else if (Input < minValue)
{
fp32 len = maxValue - minValue;
while (Input < minValue)
{
Input += len;
}
}
return Input;
}
int32_t loop_int32_constrain(int32_t Input, int32_t minValue, int32_t maxValue)
{
if (maxValue < minValue)
{
return Input;
}
if (Input > maxValue)
{
int32_t len = maxValue - minValue;
while (Input > maxValue)
{
Input -= len;
}
}
else if (Input < minValue)
{
int32_t len = maxValue - minValue;
while (Input < minValue)
{
Input += len;
}
}
return Input;
}
/**
* @brief ??????
*
* @param x ???
* @param in_min ????????
* @param in_max ????????
* @param out_min ????????
* @param out_max ????????
* @return ???????
*/
int map(int x, int in_min, int in_max, int out_min, int out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
fp32 map_fp32(fp32 x, fp32 in_min, fp32 in_max, fp32 out_min, fp32 out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}