极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14155|回复: 3

Arduino语言的函数不支持自定义类变量的传递

[复制链接]
发表于 2013-8-17 17:12:40 | 显示全部楼层 |阅读模式
在把一位大神的四轴姿态解算代码(STM32)移植到Arduino的时候被卡在了一个函数上,老是编译不通过
[pre lang="c" line="1"]
typedef  struct
        {
            float w;
            float x;
            float y;
            float z;
        }quaternion;            
static inline void quaternion_loadIdentity(quaternion * q)
    {
        q->w = 1;
        q->x = q->y = q->z = 0;
    }
   
void quaternion_normalize(quaternion * q)
{
    float norm_r = math_rsqrt(q->w*q->w + q->x*q->x + q->y*q->y + q->z*q->z);
    q->w *= norm_r;
    q->x *= norm_r;
    q->y *= norm_r;
    q->z *= norm_r;
}[/code]
上网看了看有人这么说:Arduino编程语言的函数好像只支持基本类型的参数传递,不支持自定义类或者结构体指针或变量的传递,编译都无法通过。见http://www.seguesoft.net/535a5ba2/91cd5199arduino677f5b507a0b5e8f
肿么办?这么多四元数和矩阵计算的函数要我重写吗?
回复

使用道具 举报

发表于 2013-8-17 18:51:00 | 显示全部楼层
  1. struct quaternion
  2. {
  3.   float w;
  4.   float x;
  5.   float y;
  6.   float z;
  7. };            
  8. static inline void quaternion_loadIdentity(struct quaternion * q)
  9. {
  10.   q->w = 1;
  11.   q->x = q->y = q->z = 0;
  12. }

  13. void quaternion_normalize(struct quaternion * q)
  14. {
  15.   float norm_r = math_rsqrt(q->w*q->w + q->x*q->x + q->y*q->y + q->z*q->z);
  16.   q->w *= norm_r;
  17.   q->x *= norm_r;
  18.   q->y *= norm_r;
  19.   q->z *= norm_r;
  20. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-17 22:21:55 | 显示全部楼层
pathletboy 发表于 2013-8-17 18:51
struct quaternion
{
  float w;

大神啊,跪谢。
回复 支持 反对

使用道具 举报

发表于 2014-12-17 14:41:20 | 显示全部楼层
有四元数的库么  
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-3 04:21 , Processed in 0.043322 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表