找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1894|回复: 8
收起左侧

#define LENGTH 1*1 怎么理解?

[复制链接]
ID:858964 发表于 2021-6-15 16:09 | 显示全部楼层 |阅读模式


#ifndef _KALMAN_H
#define _KALMAN_H

#define LENGTH 1*1     
#define ORDER 1
#define N 100
#define SEED 1567

//=============//
//== 最优值结构体 ==//
//=============//
typedef struct _tOptimal
{
float XNowOpt[LENGTH];
float XPreOpt[LENGTH];
}tOptimal;

extern void KalMan_PramInit(void);
extern float KalMan_Update(float *Z);

#endif

回复

使用道具 举报

ID:94031 发表于 2021-6-15 16:38 | 显示全部楼层
把程序里有 LENGTH 的地方用 1*1  替换。
回复

使用道具 举报

ID:858964 发表于 2021-6-15 18:45 | 显示全部楼层
xuyaqi 发表于 2021-6-15 16:38
把程序里有 LENGTH 的地方用 1*1  替换。

谢谢回答!
1*1 表示什么?  表示 1行1列矩阵?
回复

使用道具 举报

ID:858964 发表于 2021-6-16 00:55 | 显示全部楼层
1*1  表示1行1列的二维数组?
回复

使用道具 举报

ID:592807 发表于 2021-6-16 08:46 | 显示全部楼层
Kxuan163 发表于 2021-6-15 18:45
谢谢回答!
1*1 表示什么?  表示 1行1列矩阵?

乘法不会吗?放在宏定义只是为了方便快速替换。float XNowOpt[LENGTH];   float XPreOpt[LENGTH];替换这两数组的元素个数。
回复

使用道具 举报

ID:858964 发表于 2021-6-16 14:33 | 显示全部楼层
黄youhui 发表于 2021-6-16 08:46
乘法不会吗?放在宏定义只是为了方便快速替换。float XNowOpt[LENGTH];   float XPreOpt[LENGTH];替换这 ...

若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LENGTH  1

回复

使用道具 举报

ID:844772 发表于 2021-6-16 14:53 | 显示全部楼层
Kxuan163 发表于 2021-6-16 14:33
若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LEN ...

你说的这两个定义,在程序上是一样的,但你应该在弄卡曼滤波,LENGTH是在定义矩阵,简单说你在处理单模型单测量,所以就是1*1,为了理解方便,如果自己用,且单模型单测量,当然直接上1了还定义啥啊。
回复

使用道具 举报

ID:592807 发表于 2021-6-17 08:50 | 显示全部楼层
Kxuan163 发表于 2021-6-16 14:33
若将*理解为乘法算符,1*1结果是1,那么,以下两个宏定义有何区别?
#define LENGTH  1*1
#define LEN ...

一个班级有X排课桌Y列课桌整整齐齐方方正正的,我宏定义一个班级课桌数量 X*Y有毛病吗?难道5行6列课桌定义成5*6不比定义直接定义成30更加清晰可观吗?这里要的不是宏定义的结果,而是要理解起来和修改起来更加方便,5*6一看就知道课桌是怎么排的?有多少张?至于为何不用二维数组,就得问写函数的人了。
回复

使用道具 举报

ID:81196 发表于 2021-6-17 11:17 | 显示全部楼层
这个是直接替代,可以减少内存的开销.使用带参数的宏既代替了函数的功能,有避免了函数入栈和出栈操作,减少了系统的开销,提高了运行的效率。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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