c语言实现 三角函数,小型嵌入式系统的三角函数C实现
在小型嵌入式系统中,用到sin,cos等三角函数时,不能象在pc上编程般运用math库来实现,若没有浮点运算器,也不能运用泰勒公式展开来计算三角函数值。本文提供一种简单的查表法来计算。
文 件i_sin.h中,保存了0-90度角的sin值向左位移15后的结果。对每个角度的三角函数做运算时,以角度为小标在sin_map表中查找相应的 sin值(位移后的结果)。之所以要对sin值向左位移,是保证可以用整数来表达sin值。位移的大小(本文中为15),标称了sin值取值的精度,越 大,sin值取值越精确。
文件i_sin.h中,提供了两个三角函数的计算宏:
rsin(_r_, _d_),
rcos(_r_, _d_),
参数_r_表示得到的sin或是cos值扩大的倍数;
参数_d_表示角度值。
实现比较简单,不再冗述。
/******************************************************************
*
* File Name: pw_sin.h
* Description: The sin() function map. Using it to calculate a
* angle's sine value and cosine value.
* e.g.
* angle d=30 degrees,
* sin(d) = (sin_map[30] >> SIN_MAP_SHIFT)
* result: sin(30) = 0.5
*
* Author : Jiang Peifu
*/
#ifndef PW_SIN_H
#define PW_SIN_H
/* -------------------------------------------------------------------------- */
#define SIN_MAP_SHIFT 15
#define DEGREE_MIN 0
#define DEGREE_MAX 90
#define SIN_MAP_SIZE (DEGREE_MAX - DEGREE_MIN + 1)
#define rsin(_r_, _d_) ((_r_ * sin_map[_d_] + 0x4000) >> SIN_MAP_SHIFT)
#define rcos(_r_, _d_) ((_r_ * sin_map[DEGREE_MAX-_d_] + 0x4000) >> SIN_MAP_SHIFT)
int sin_map[SIN_MAP_SIZE] = {
0,
572,
1144,
1715,
2286,
2856,
3425,
3993,
4560,
5126,
5690,
6252,
6813,
7371,
7927,
8481,
9032,
9580,
10126,
10668,
11207,
11743,
12275,
12803,
13328,
13848,
14365,
14876,
15384,
15886,
16384,
16877,
17364,
17847,
18324,
18795,
19261,
19720,
20174,
20622,
21063,
21498,
21926,
22348,
22763,
23170,
23571,
23965,
24351,
24730,
25102,
25466,
25822,
26170,
26510,
26842,
27166,
27482,
27789,
28088,
28378,
28660,
28932,
29197,
29452,
29698,
29935,
30163,
30382,
30592,
30792,
30983,
31164,
31336,
31499,
31651,
31795,
31928,
32052,
32166,
32270,
32365,
32449,
32524,
32588,
32643,
32688,
32723,
32748,
32763,
32768,
};
#endif /* PW_SIN_H */
c语言实现 三角函数,小型嵌入式系统的三角函数C实现相关推荐
- 快速傅里叶变换FFT C语言实现 可用于嵌入式系统进行模拟采样频谱分析
快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号.不一定是周期信号)的频率(或相位.此处不研究相位)成分,且傅里叶变换对应的 ω \omega ...
- C语言嵌入式系统编程修炼之道——背景篇
C语言嵌入式系统编程修炼之道--背景篇 作者:宋宝华 e-mail:[email]21cnbao@21cn.com[/email] 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势 ...
- [转]C语言嵌入式系统编程修炼之背景篇
http://www.2ed.cn/Article-150-21922.shtml 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑, ...
- 浅谈C语言嵌入式系统编程注意事项
C语言嵌入式系统编程注意事项之背景篇 本文的讨论主要围绕以通用处理器为中心的协议处理模块进行,因为它更多地牵涉到具体的C语言编程技巧 不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上 ...
- 用C语言实现高效嵌入式系统编程
1引言 随着市场竞争的日趋激烈,要求电子工程师能够在短时间内编写出执行效率高而又可靠的嵌入式系统的执行代码.同时,由于实际系统的日趋复杂,要求所写的代码规范.模块化并便于多个工程师以软件工程的 ...
- C语言在嵌入式系统编程时的注意事项
C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...
- C语言嵌入式系统编程修炼(经典中的经典)
C语言嵌入式系统编程修炼 http://blog.chinaunix.net/u/25764/showart_326589.html转载自这里,真是太经典了. C语言嵌入式系统编程修炼 ...
- C语言嵌入式系统编程
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑,汇编语言具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是嵌入式系统开发 ...
- C语言嵌入式系统编程注意事项
不同于一般形式的软件编程,嵌入式系统编程建立在特定的硬件平台上,势必要求其编程语言具备较强的硬件直接操作能力.无疑, 汇编语言 具备这样的特质.但是,归因于汇编语言开发过程的复杂性,它并不是 嵌入式系 ...
- 期末复习【嵌入式系统】
期末复习[嵌入式系统] 前言 推荐 期末复习 推荐 题型 押题 复习 总述 问题与思考: 教学内容介绍 问题与思考 第1章 嵌入式系统基础 问题与思考 1.1 引言 1.2 嵌入式系统的概述 1.2. ...
最新文章
- [转]为什么我要用 Node.js? 案例逐一介绍
- 【控制】《鲁棒控制-线性矩阵不等式处理方法》-俞立老师-第1章-引言
- Luogu P5564 [Celeste-B]Say Goodbye (多项式、FFT、Burnside引理、组合计数)
- Crontab命令--Linux
- 【阿里妈妈营销科学系列】第三篇:受众沟通和品牌认知评价
- C# 9 新特性——init only setter
- java国际化——消息格式化+文本文件和字符集
- java算法判断链表有没有闭环_前端算法系列之二:数据结构链表、双向链表、闭环链表、有序链表...
- 查找空目录Linux,Linux中find批量删除空文件及空文件夹脚本
- node简介及安装、下载及运行hexo
- 很基本的权限功能小结
- 开发一个大型后台管理系统,真的需要用前后端分离的技术方案吗?
- java拥有键值对的数据结构_Java数据结构之004--HashMap
- 刷新率调高,或高于60Hz闪屏,忽明忽暗,晃动问题
- 1.支付平台架构:业务、规划、设计与实现 --- 收银台业务
- 初识C语言——C语言基础知识
- 批量启用AD中账户的Exchange邮箱
- java初级中级高级区分_初级、中级、高级程序员之间的区别,最后的顶级程序员很秀...
- sklearn股票预测
- 服务器被黑怎么用防御系统解决