duobuchassis/User/bsp/calc_lib.c
2025-12-27 20:44:42 +08:00

115 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "calc_lib.h"
#include <stdint.h>
//΢<><CEA2><EFBFBD><EFBFBD>ʱ
void user_delay_us(uint16_t us)
{
for(; us > 0; us--)
{
for(uint8_t i = 50; i > 0; i--)
{
;
}
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
void user_delay_ms(uint16_t ms)
{
for(; ms > 0; ms--)
{
user_delay_us(1000);
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
void abs_limit_fp(fp32 *num, fp32 Limit)
{
if (*num > Limit)
{
*num = Limit;
}
else if (*num < -Limit)
{
*num = -Limit;
}
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>
void abs_limit_int(int64_t *num, int64_t Limit)
{
if (*num > Limit)
{
*num = Limit;
}
else if (*num < -Limit)
{
*num = -Limit;
}
}
//ѭ<><D1AD><EFBFBD>޷<EFBFBD>
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;
}
extern int map(int x, int in_min, int in_max, int out_min, int out_max) //ӳ<><EFBFBD><E4BAAF>
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
extern fp32 map_fp32(fp32 x, fp32 in_min, fp32 in_max, fp32 out_min, fp32 out_max) //ӳ<><EFBFBD><E4BAAF>
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}