打印
[应用相关]

stm32开发常用的数学函数

[复制链接]
3049|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-6-12 09:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在MDK5的安装路径中:D:\MDK5\ARM\ARMCC\include,可以看到很多C库头文件,在程序中只要包含了相应的头文件,编译器就会自动把相应的代码编译链接进去。



下面介绍在STM32可能会用到的函数:

#include "math.h"


1、 三角函数

double sin(double);正弦
double cos(double);余弦
double tan(double);正切

2、指数与对数

double frexp(double value,int *exp);这是一个将value值拆分成小数部分f和(以2为底的)指数部分exp,并返回小数部分f,即f*2^exp。其中f取值在0.5~1.0范围或者0。
double ldexp(double x,int exp);这个函数刚好跟上面那个frexp函数功能相反,它的返回值是x*2^exp
double modf(double value,double *iptr);拆分value值,返回它的小数部分,iptr指向整数部分。
double log (double); 以e为底的对数
double log10 (double);以10为底的对数
double pow(double x,double y);计算x的y次幂
float powf(float x,float y); 功能与pow一致,只是输入与输出皆为浮点数
double exp (double);求取自然数e的幂
double sqrt (double);开平方

3 、取整

double ceil (double); 取上整,返回不比x小的最小整数
double floor (double); 取下整,返回不比x大的最大整数

4 、绝对值

int abs(int i); 求整型的绝对值
double fabs (double);求实型的绝对值
double cabs(struct complex znum);求复数的绝对值

5 、取整与取余,用/和%可代替

double modf (double,double*); 将参数的整数部分通过指针回传,返回小数部分
double fmod (double,double); 返回两参数相除的余数



#include "stdlib.h"


//返回整数变元num的绝对值
int abs(int num);  

//返回长整形num的绝对值。
long labs(long int num);

//把str指向的串转换为双精度浮点值,串中必须含合法的浮点数,否则返回值不确定。
//串中的数可以由有效浮点数中的任何字符结束,如空白符、除句号外的标点符号和E或e之外的字符等。
double atof(const char *str);

//把str指向的串转换为整数(int)值。串中必须含合法整型数,否则返回值无定义。
//串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。
int atoi(const char *str);

//把str指向的串转换为长整数(long int)值。串中必须含合法整型数,否则返回值无定义。
//串中的整数内容可由任何不是该整数的一部分的字符终止,如空白符、标点符号和字符等。
long atol(const char *str);

//产生伪随机数序列,每次它被调用时返回一个0到RAND_MAX间的整数。RAND_MAX值至少是32767。
int rand(void);

//为rand()生成的伪随机数序列设置起点。
void srand(unsigned int seed);
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_40170041/article/details/139468259

使用特权

评论回复
沙发
呐咯密密| | 2024-6-12 16:08 | 只看该作者
这些数学函数都很好用

使用特权

评论回复
板凳
EmmaTT| | 2024-6-18 22:22 | 只看该作者
我也就会个开平方了

使用特权

评论回复
地板
wang6623| | 2024-6-30 14:48 | 只看该作者
三角函数

double sin(double);正弦
double cos(double);余弦
double tan(double);正切

使用特权

评论回复
5
suncat0504| | 2024-6-30 21:58 | 只看该作者
好家伙,挺全乎。谢谢分享!

使用特权

评论回复
6
bartonalfred| | 2024-7-4 19:34 | 只看该作者
在使用数学函数之前,了解它们的函数原型和参数类型是非常重要的。这有助于你正确地传递参数并处理返回值。

使用特权

评论回复
7
albertaabbot| | 2024-7-4 21:48 | 只看该作者
在使用这些函数时,应检查其返回值或错误标志,以确保结果的正确性。

使用特权

评论回复
8
sdlls| | 2024-7-7 14:52 | 只看该作者
STM32中的浮点数运算可能会受到精度限制。在使用浮点数时,要确保你的算法能够处理这种精度限制,并在必要时使用固定点数学或其他技术来提高精度。

使用特权

评论回复
9
burgessmaggie| | 2024-7-7 17:55 | 只看该作者
数学函数,尤其是复杂的数学函数(如三角函数、指数函数、对数函数等),在执行时可能会消耗较多的CPU周期和内存资源。在对性能有严格要求的应用中,应考虑优化算法或使用查找表等技巧减少计算开销。

使用特权

评论回复
10
uptown| | 2024-7-9 20:17 | 只看该作者
在使用数学函数时,应遵循最佳实践,如避免不必要的计算、减少浮点数的使用、使用常量代替重复计算等。这些实践可以提高代码的性能和可读性。

使用特权

评论回复
11
fengm| | 2024-7-9 23:24 | 只看该作者
为了使用数学函数,你需要包含<math.h>头文件。在某些情况下,你可能还需要包含其他特定于STM32的头文件,如arm_math.h,它包含了一些针对ARM Cortex-M系列处理器的优化数学函数。

使用特权

评论回复
12
belindagraham| | 2024-7-10 03:08 | 只看该作者
虽然STM32库可能提供了数学函数,但在特定性能或资源限制下,自定义实现或采用开源的优化算法 可能会更合适。

使用特权

评论回复
13
yeates333| | 2024-7-10 23:44 | 只看该作者
不是所有的STM32系列都内置了浮点单元(FPU)。如果使用的是没有FPU的MCU进行浮点运算,会显著增加处理器负载和延时,因此可能需要考虑使用定点数运算或者外接FPU。

使用特权

评论回复
14
pmp| | 2024-7-12 09:43 | 只看该作者
部分数学函数可能需要额外的内存空间来存储临时变量或结果。在使用这些函数时,注意检查系统是否有足够的内存资源可用。

使用特权

评论回复
15
bestwell| | 2024-7-12 13:17 | 只看该作者
某些数学函数可能比其他函数更耗时或占用更多内存。在选择函数时,要根据你的应用需求和资源限制来权衡性能和内存占用。

使用特权

评论回复
16
beacherblack| | 2024-7-12 16:42 | 只看该作者
STM32的某些数学函数可能只支持特定数据类型的输入,如double或float。如果输入数据类型不匹配,可能会导致计算错误或不可预测的结果。

使用特权

评论回复
17
mattlincoln| | 2024-7-13 10:32 | 只看该作者
可以通过优化代码(如减少不必要的函数调用、使用查表法等)来提高数**算的性能。

使用特权

评论回复
18
uytyu| | 2024-7-13 13:44 | 只看该作者
当计算平方根时,如果输入值为负数,sqrt()函数可能会返回NaN(不是一个数字)或设置错误标志。

使用特权

评论回复
19
deliahouse887| | 2024-7-13 17:18 | 只看该作者
部分数学函数可能会被编译器优化掉,导致实际运行结果与预期不符。在对性能要求不高但需要确保准确计算的场合,可以考虑关闭编译器的优化功能。

使用特权

评论回复
20
hearstnorman323| | 2024-7-13 20:26 | 只看该作者
对于整数除法,结果会自动向下取整,如果需要浮点数结果,则需要使用浮点数除法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1931

主题

15614

帖子

12

粉丝