一个底层驱动函数的解读
来源:互联网 发布:linux vim颜色设置 编辑:程序博客网 时间:2024/05/20 04:27
/**************************************************************************
* Description
* Write a byte into some one byte register.
*
* Parameters
* addr : The register's address.
* data : The data.
* Returns
* None.
*
* Return Value List
* void : None.
* Remarks
* None.
**************************************************************************/
inline void HAL_PUT_UINT8(volatile UINT8 *addr, UINT8 data)
{
int shft;
shft = ((UINT32)addr & 0x03) << 3;
*(UINT32 *)((UINT32)addr & ~3UL) = (*(UINT32 *)((UINT32)addr & ~0x03) & ~(0xFF << shft)) | (data << shft);
}
左移3相当于x8;
addr&0x03相当于对addr除以4取余数(得到一个相当段内偏移的一个值),为什么要对4取余数呢?因为数据在内存中的存放实际上是以4个字节为单位的(有问题),这样可以避免大小端的问题;
addr&~0x03相当于对addr减去了余数,得到一个能被4整除的最大的数,这个数作为地址(相当于段基址),如下图所示:
代码中蓝色的部分是原来的数据,与~(0xFF<<shft)会把原来位置上的一个字节的数清空,然后再跟data<<shft相或,即可将data写入指定的位置。
- 一个底层驱动函数的解读
- 图形驱动库开发之底层驱动函数的编写
- PHP源码阅读 Day.2 解读PHP底层 mysql的驱动链接
- 推荐一个底层驱动开发网站
- 驱动调用底层的硬件
- 一个简单的NT驱动之驱动入口函数(DriverEntry)
- Android上层如何调用一个底层函数
- 蓝牙底层HCI驱动的实现
- 基于Linux操作系统的底层驱动技术
- 蓝牙底层HCI驱动的实现 .
- 蓝牙底层HCI驱动的实现
- JFFS2底层驱动的挂载
- 6轴传感器LSM330DLC的底层驱动
- 蓝牙底层HCI驱动的实现
- Linux文件系统和底层驱动的笔记
- HashMap底层源码解读
- LinkedHashMap底层源码解读
- 函数调用的底层机制
- 毕业了,。。。。。。。。。。。。。。。。。。。。。。
- 方法重载
- 解决asp.net中radio button的排他性在DataList控件中失效的BUG
- DIV居中,居于窗口四角的方法
- SMPP协议
- 一个底层驱动函数的解读
- 使用RMAN来实现主库不停机的物理standby Data Guard 搭建
- KMP算法详解
- shell脚本调用java
- JAVA 开发内存溢出
- Web开发者必知的12款jQuery插件
- oracle 建表--序列--插入值
- C语言写的MD5加密核心算法--只是摘抄的网上的算法
- java基本算法总结