问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在keil里面变异出现这样的情况,是什么错误,该怎么改正

发布网友 发布时间:2022-09-05 05:18

我来回答

5个回答

热心网友 时间:2024-08-23 19:00

看你的信息,你那个是在NI.c文件里,也就是说,你的是C语言文件?
但是你有这么一句:
parser->handleDataValue( 0, PARSER_CODE_RAW_SIGNAL, 2,
parser->payload,
parser->customData
);
显而易见,你的那个Parser是一个结构体的指针,而你的这个结构体里有函数:
handleDataValue(,,,)

是这样的,C语言里,结构体是不允许有函数的,C语言的结构体里不允许有函数的存在,C++里可以,C语言不行.

热心网友 时间:2024-08-23 19:00

C语言结构体里面可以使用函数啊,只需要在结构体里面申明的是函数指针就可以了啊

热心网友 时间:2024-08-23 19:01

你的C语言没学好,C语言结构体不允许使用函数.

热心网友 时间:2024-08-23 19:01

上面说结构体中不能使用函数指针的是菜鸟中的菜鸟,51不是基于堆栈架构的,所以有一些参数是无法通过寄存器传递的(51的传参全部有寄存器完成),正常C语言调用是讲参数压入堆栈,正是因为这些区别,所以我们需要对函数进行修改,最简单的在结尾加可重入标识,让keil使用模拟堆栈传参。
uint8_t (*dht22_msg_cb)(dht22_t *dht, uint8_t msg, uint8_t arg_int, void *arg_ptr) reentrant;//由于51不是堆栈架构,所以,这里有一部分参数不能由于R0-R9进行传递,而需要使用模拟堆栈
还有几种情况,例如
void (*p)(void *a,void *b)//这原本是不能正常工作的会报错,报错就是楼主遇到的,怎么改,讲这个指针类型改成内存属性
void (*p) (void xdata *, void xdata *);

另外就是传递的参数过多,超过了寄存器的使用(不一定报错),但是会异常,这里还有一个调用深度的问题,例如我有很多层a调用b,b调用c,,,这样的,如果都不传参,一般没问题,如果传参数,你就要注意了,如果没有使用模拟堆栈,很有可能你本来a传递进两个参数p,q。。后面调用完后面一系列函数之后p,q会变掉,这是由于编译器没寄存器可用的时候使用了和p,q同一个寄存器导致的,文字描述可能有些不够详细,不过我想说,中国学生,老师,普遍的编程水平不高,在职工程师我不清楚,就我的学习经历而言,像此类问题,多google,看不懂用Chrome网页翻译,另外,单片机编程不要太过于苛求外设的驱动,应该注重思想,像结构体中使用函数指针是一个很重要的开始,这可以实现诸如回调机制,面向对象机制,消息机制,等。单片你裸机编程中,有一个很受用的架构叫做以时基和消息驱动的单片机架构(这本书也是国外的),这也是操作系统的基础,好了就说这么多了。

热心网友 时间:2024-08-23 19:02

又是一个新手
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
交通事故致人死亡,该如何处理? 爱普生LQ1600KIIIH 断色带 爱普生针式打印机LQ1600KⅢH近两月来总频繁中断打印,同时电脑显示是通讯... ACQUA DI PARMA 帕尔玛之水 蓝色地中海系列 桃金娘加州桂中性淡香水 E... 女士香水推荐-ACQUA DI PARMA 帕尔玛之水 优雅木兰女士浓香水 EDP 50... ACQUA DI PARMA帕尔玛之水克罗尼亚系列中性香水套装-适用对象 帕尔玛 | 必须拥有的小众沙龙香 ACQUA DI PARMA/帕尔玛之水克罗尼亚系列黑调男士古龙水-适用对象 ACQUA DI PARMA 帕尔玛之水 克罗尼亚系列 风度中性古龙水 EDC 20ml... ACQUA DI PARMA/帕尔玛之水-绅士男士古龙水EDC proteus8.8有dht11吗 求dht22(或者DHT11)的msp430f149程序。自己写了好久了不知道怎么回事仿... 求DHT22/AM2302温湿度传感器AT89S52单片机程序 思科重启命令 电视机用摇控关了还会耗电吗? 台式机cpu的更换方法步骤详解 资本金充足率的介绍 浦发银行信用卡额度一般是多少? 浦发银行信用卡额度一般多少? 梦幻新坐骑-大金鱼-是不是必须是队长拥有才可以?队员有的话能不能给大... 梦幻西游那么多人用大金鱼,5开很划算吗? 梦幻大金鱼可以带着队友飞吗 梦幻西游的金鱼祥瑞我怎么让全队都骑上去啊? 梦幻西游答金鱼怎么让人家乘坐 金刚石是用什么原料制成的,而且他的加工工艺又是什么呢 汽车喷油嘴坏了的表现症状 汽车喷油嘴坏了汽车会出现什么症状 王者荣耀v8多少钱 在厦门要到哪里办残疾证?要带什么证件? 脑筋急转弯之什么动物天天熬夜 求DHT22/AM2302温湿度传感器Arduino程序 ...还有区别没。DHT11的程序,可以用于DHT22么。 AP一断开电源就恢复出厂设置,怎么回事? 关于4个DHT22的无线nrf24l01传输,温度的序位正确,但是湿度的序位确... 浴室金属件除锈的办法 浴室锅炉怎样除锈 乐至中考B3是多少分 乐至乐中分数折合吗 四川乐至少数民族中考加多少分? 资阳市雁江区中考与成都相比 西安2022年中考各学校录取分数线 离婚了协议还能再改吗 ...什么叫北天 北天星空和南天星空分别指的是什么? 傲剑丹田肉身洞箫弓箭八卦掌升级数据攻略 傲剑丹田肉身洞箫弓箭八卦掌... 傲剑,洞悉5升6多少 傲剑修行数据 傲剑修行升级需要多少太虚古卷 傲剑肉身7升8数据 7升8需要多少材料 傲剑的相关攻略 傲剑号77级肉身六.丹田六.弓箭五.暗器五.八卦六、洞箫四、四灵五... 傲剑神照经升级数据 需要多少神照经抄本