位运算(bit)
一、简介
位运算是一种在计算机系统中对二进制数位进行操作的运算。由于计算机内部数据的存储和处理都是以二进制形式进行的,位运算能够直接对整数的二进制位进行高效操作。位运算包括与(&)、或(|)、异或(^)、非(~)、左移(<<)和右移(>>)等基本操作。
二、演示功能概述
本教程教你如何用 Air724 开发板,进行 API 函数基础服务-位运算(bit)。
三、准备硬件环境
3.1 开发板准备
使用 EVB_Air724 开发板,如下图所示:
淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接 ;
此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
api:https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 数据通信线
USB 数据线一根(micro usb)。
3.3 PC 电脑
WIN7以及以上版本的WINDOWS系统。
3.4 SIM 卡
中国大陆环境下,可以上网的 sim 卡。一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。
3.5 组装硬件环境
USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。
四、准备软件环境
4.1 下载调试工具
使用说明参考:Luatools 下载和详细使用
4.2 源码及固件
4.2.1 底层 core 下载
下载底层固件,并解压
链接:https://docs.openluat.com/air724ug/luatos/firmware/
如下图所示,红框的是我们要使用到的。
4.2.2 本教程使用的 demo 见附件:
4.3 下载固件和脚本到开发板中
打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。
点击项目管理测试选项。
进入管理界面,如下图所示。
- 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中
- 点击增加脚本或资源文件,选择 之前下载的程序源码,如下图所示。
- 点击下载底层和脚本,下载完成如下图所示。
五、代码示例介绍
5.1 API 说明
本文用到的接口函数不做详细介绍,可通过点击右侧链接查看具体介绍:bit API
5.2 testBit.lua 代码
打印输出各种位操作指令。
--- 模块功能:闹钟功能测试(支持开机闹钟和关机闹钟,同时只能存在一个闹钟,如果想实现多个闹钟,等当前闹钟触发后,再次调用闹钟设置接口去配置下一个闹钟).
-- @author openLuat
-- @module alarm.testAlarm
-- @license MIT
-- @copyright openLuat
-- @release 2018.03.14
require "sys"
require"misc"
module(...,package.seeall)
sys.taskInit(function()
sys.wait(10000)
log.info("按位取反,输出-6",bit.bnot(5))
log.info("与,--输出1",bit.band(1,1))
log.info("或,--输出3",bit.bor(1,2))
log.info("异或结果为4",bit.bxor(2,3,5))
log.info("逻辑左移,“100”,输出为4",bit.lshift(1,2))
log.info("逻辑右移,“001”,输出为1",bit.rshift(4,2))
log.info("算数右移,左边添加的数与符号有关,输出为0",bit.arshift(2,2))
log.info("参数是位数,作用是1向左移动两位,打印出4",bit.bit(2))
log.info("测试位数是否被置1",bit.isset(5,0))--第一个参数是是测试数字,第二个是测试位置。从右向左数0到7。是1返回true,否则返回false,该返回true
log.info("测试位数是否被置1",bit.isset(5,1))--打印false
log.info("测试位数是否被置1",bit.isset(5,2))--打印true
log.info("测试位数是否被置1",bit.isset(5,3))--返回返回false
log.info("测试位数是否被置0",bit.isclear(5,0))----与上面的相反
log.info("测试位数是否被置0",bit.isclear(5,1))
log.info("测试位数是否被置0",bit.isclear(5,2))
log.info("测试位数是否被置0",bit.isclear(5,3))
log.info("把0的第0,1,2,3位值为1",bit.set(0,0,1,2,3))--在相应的位数置1,打印15
log.info("把5的第0,2位置为0",bit.clear(5,0,2))--在相应的位置置0,打印0
sys.wait(2000)
end)
5.3 main.lua 代码
本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载测试模块。
六、开机调试
6.1 开发板开机
连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。
6.2 功能调试
打印输出各种位操作指令。
七、位操作命令列表
bit.bnot( value )
bit.band( val1, val2, ... valn )
bit.bor( val1, val2, ... valn )
bit.bxor( val1, val2, ... valn )
bit.lshift( value, shift )
bit.rshift( value, shift )
bit.arshift( value, shift )
bit.bit( position )
bit.isset(value, position)
bit.isclear(value, position)
bit.set(value, pos1, pos2, ...posn)
number=bit.clear(value, pos1, pos2, ...posn)