拜读了项目中的祖传代码,给人的感觉就是----厚重的包浆感~~~~~~~但是,祖传代码细细阅读也是有很多值得细细玩味的地方,比如对于以补码形式输出的传感器,如何进行快速的解码。

        按照最容易理解的方法,就是按照补码转为原码的运算方法:[x_补]_补=X,正数的原码与补码相同,负数的补码为其反码加1。这样我们不得不再编写一个解码程序。

        一个巧妙的方法思路为:计算机中数据的存储方式是按照补码形式存储的,如果传感器数据输出为32位,那么定义  Int32 x = sensor_output(...),那么x中存储的就为x的补码,如果printf(..,x),那么实际上x就是我们所需要的。 

        如果传感器数据输出为24位负数,即最高位(符号位)为1,那么执行  Int32 x = sensor_output(...)时,x的低24位将会填充为数据的补码,高8位为0,那么此时因为x的最高位(符号位)为0,因此x此时是一个正数,而这不是我们所需要的,因此需要向高位填充1,符合负数的补码形式:x = x|0xff000000.

此步骤相当于8086cpu的符号扩展指令CWB、cwd指令。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐