Tool之函数引用

最近有童鞋遇到一个浮点函数返回异常的问题。代码简化如下

在VxWorks里运行一下

计算结果明显不对。为啥?

看看Workbench的Build Console,有个Warning:

原来是没有声明函数aaa()

把代码改一下

再跑一次

OK,it works!

有兴趣的童鞋可以把两次的bbb.o文件反汇编出来

对比一下

对应的指令确实不一样了,不过我本科那点儿汇编知识,早就不知道去哪了...

接下来,把刚刚的类型扩展一下

再看看运行结果

ccc()和ddd()的内部操作还是正常的,但返回值溢出了;而bbb()更不幸,内部处理都乱了,说明入参就已经错了。

把返回值的长度打印出来看看:

都变成4Bytes了

看来编译器在找不到原型时,都是按32bits来处理的。

把声明都加上吧:

这次都正常了

当然了,函数声明最好还是放到头文件里,然后引用头文件就可以了。

另外,对于这典型的浮点操作,我们之前提到过,创建Task时需要包含VX_FP_TASK这个选项

良好的Coding,要消灭所有Warning,杜绝一切风险!^_^

这正是:

函数引用要声明,否则返回变整型。

编译阶段有Warning,规范编码要查清。

本文分享自微信公众号 - 这里只有VxWorks(VxWorks567),作者:泰山3721

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Component之C++

    首先,VxWorks支持C++编程,毕竟面向对象语言功能强大。不过因为性能的原因,在实时系统里,更多的还是使用C语言来编程。尤其在信号和中断处理函数里调用C++...

    Taishan3721
  • Sim之simnet_nat

    Vx6.9的Simulator提供两种方式来支持Network。全功能的方式叫simnet,需要在Host端安装虚拟网卡;另一种simnet_nat就简单很多,...

    Taishan3721
  • Tool之Target Server(vx6)

    在开发Embedded RTOS时,多是采用交叉式的开发方式,VxWorks就是一个典型代表。运行VxWorks的远程设备,称之为Target;运行IDE(例如...

    Taishan3721
  • Excel函数学习重点指南(官网)

    林万程
  • 无线安全第二篇:如何获取路由器管理权限和如何防范

    实现“蹭网”的初级目标后,小黑并没有就此罢手,而是尝试进行进一步的深入攻击:攻陷路由器,获得路由器的管理权。

    网e渗透安全部
  • 从房东那接入的网线直接插入到电脑的网线断口可以上网,接入到路由器不能上网

    2.如果路由器是无线路由器:电脑接入无线路由器的WIFI信号;如果路由器是有线路由器:将网线接入路由器的1端口,另一端接入电脑的网线端口

    悟空聊架构
  • 黑客成长之路-01.新手篇-设置路由器

    悟空聊架构
  • 飞鱼星路由器管理密码忘了怎么办?

    1、打开浏览器—输入192.168.1.1(一般路由器地址是这个或者查看路由器背面的登录信息)进路由—输入用户名,密码 ,(默认一般是admin)。

    砸漏
  • 让python装饰器不再晦涩难懂

    在学习修饰器函数之前,考虑如下的两种情形: a. 有一个函数fn,我们不能修改函数的源代码,但是要扩展函数的功能,怎么实现呢? 我们可以定义一个新的函数 ...

    qsjs
  • OSPF详解-3 邻接、度量值

    运行链路状态路由协议的路由器必须首先与选定的邻居路由器建立邻接关系,这是通过与邻居路由器交换Hello分组来实现的。

    py3study

扫码关注云+社区

领取腾讯云代金券