自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 资源 (4)
  • 收藏
  • 关注

原创 编译乱序和执行乱序

编译乱序编译器可以对访存的指令进行乱序,减少逻辑上不必要的访存,以及尽量提高 Cache 命中率和 CPU 的 Load/Store 单元的工作效率。因此在打开编译器优化以后,有时会看到生成的汇编码并没有严格按照代码的逻辑顺序。解决编译乱序问题,需要通过 barrier() 编译屏障进行。可以在代码中设置 barrier() 屏障,这个屏障可以阻挡编译器的优化。对于编译器来说,设置编译

2018-01-23 15:22:51 1801

原创 Linux 申请内存

在用户空间动态申请内存在用户空间中动态申请内存的函数为 malloc(),这个函数在各种操作上的使用都是一致的。与之对应的释放函数为 free()。对于 Linux 而言,C 库的 malloc() 函数一般通过 brk() 和 mmap() 两个系统调用从内核申请内存。在内核空间动态申请内存在 Linux 内核空间中申请内存涉及的函数主要包括 kmalloc()、__ge

2018-01-23 12:47:05 3483

原创 Linux 内核定时器

Linux 内核定时器软件意义上的定时器最终依赖硬件定时器实现,内核在时钟中断发生后检测各定时器是否到期,到期后的定时器处理函数将作为软中断在底半部执行。实质上,时钟中断处理程序会唤起 TIMER_SOFTIRQ 软中断,运行当前处理器当上到期的所有定时器。1. timer_list在 Linux 内核中,timer_list 结构体的一个实例对应一个定时器,代码如下所示:stru

2018-01-22 16:57:42 271

原创 Linux 内核延时

短延时Linux 内核中提供了以下 3 个函数分别进行纳秒、微妙和毫秒延迟:void ndelay(unsigned long nsecs);void udelay(unsigned long usecs);void mdelay(unsigned long msecs);上述延迟的实现原理本质上是忙等待,它根据 CPU 频率进行一定次数的循环。注意:毫秒延时(以及更大的秒

2018-01-22 16:52:00 826

原创 Linux 中断

中断简介根据中断的来源,中断可分为内部中断和外部中断。内部中断的中断源来自 CPU 的内部(软件中断、溢出、除法错误等);外部中断的中断源来自 CPU 外部,由外设提出请求。根据中断是否可以屏蔽,中断分为可屏蔽中断和不可屏蔽中断(NMI,Not Masked Interrupt)。根据中断入口跳转方法的不同,中断可分为向量中断和非向量中断。向量中断由硬件提供中断服务程序入口地址,非向量

2018-01-22 13:21:02 385

原创 Linux异步通知

1.Linux信号定义信号                                值                                含义SIGHUP                           1                                挂起SIGINT                            2                 

2018-01-19 14:57:10 327

原创 stm32通过usb下载固件

1. 下载并安装 Dfu 工具下载地址:http://www.st.com/en/development-tools/stsw-stm32080.html安装过程:省略安装完 Dfu 工具后,发现在开始菜单下多了两个程序:Dfu file manager 和 DfuSeDemo。如下图所示:要想制作 dfu 文件的话,这两个工具一个都不能少。2. 安装驱动驱动在安装目录...

2018-01-15 11:22:52 16838 2

原创 Keil 生成 bin 文件

1. 在Keil MDK软件的菜单上栏选择 Project -> Options for Target,如下图所示:2. 点击 User 选项卡,在 After Build/Rebuild 下选择一个没有使用的项,我这里使用的是 Run #1,在后面输入fromelf.exe --bin -o ***.bin ***.axf,如下图所示:3. Keil

2018-01-15 09:53:06 625

原创 Linux 文件系统与设备驱动

1.  Linux中虚拟文件系统、磁盘/Flash文件系统及一般的设备文件与设备驱动之间的关系,如下图所示:应用程序和 VFS 之间的接口是系统调用,而 VFS 与文件系统以及设备文件之间的接口是 file_operations 结构体成员函数,这个结构体包含对文件进行打开、关闭、读写、控制的一系列成员函数。2. 字符设备的访问由于字符设备的上层没有类似于磁盘的 ext2 等文件系统,所以字符设备...

2018-01-10 10:33:45 1468

原创 Linux 文件系统目录结构

进入 Linux 根目录("/"),运行 ls -l 命令:1. /bin包含基本命令,如 ls、cp、mkdir 等,这个目录中的文件都是可以执行的。2. /sbin包含系统命令,如 modprobe、hwclock、ifconfig 等,大多是涉及系统管理的命令,这个目录中的文件都是可执行的。3. /dev设备文件存储目录,应用程序通过对这些文件的读写和控制以访问实际的...

2018-01-10 09:44:29 277

原创 stm32f407系列单片机usb高速模式下的速度测试

环境:上位机:Window 7 64bit + VMware + Ubuntu 16.04 64bit下位机:stm32f407igt6 + usb3300测试结果:单次传输数据为8KB时,传输速度为4MB/s单次传输数据为16KB时,传输速度为8MB/s单次传输数据为60KB时,传输速度为20MB/s

2018-01-09 15:18:03 9647 4

原创 Linux 内核模块

Linux 内核模块程序结构:(1)模块加载函数(2)模块卸载函数(3)模块许可证声明(4)模块参数(5)模块导出符号(6)模块作者等信息声明模块加载函数一般以 __init 标识在 Linux 中,所有标识为 __init 的函数如果直接编译进内核,成为内核镜像的一部分,在连接的时候都会放在 .init.text 这个区段内。所有的 __init 函数在区段 .initcall.init中还保存...

2018-01-05 17:14:57 231

uboot顶层config.mk分析

config.mk主要做的工作: 1.设置obj和src,并清空各种标志(26 ~ 45行) 2.与ppc相关的交叉编译工具的配置(54 ~ 70行,不重要,可以不看) 3.shell相关的一些配置、主机编译器相关的一些配置(74 ~ 84行) 4.配置交叉编译工具链(91 ~ 107行) 5.加载开发板相关的配置选项(111 ~ 130行) 6.编译选项相关的配置(135 ~ 141行,不重要,可以不看) 7.指定链接脚本(142 ~ 149行) 8.获取链接地址(154 ~ 158行) 9.设置头文件搜索路径(160 ~ 166行) 10.使用起始链接地址(198 ~ 201行) 11.BFD库相关的配置(213 ~ 228行,不重要,可以不看) 12.设置自动推导规则(239 ~ 256行)

2018-09-04

uboot顶层Makefile分析

uboot顶层Makefile分析,一行指令对应一行注释,看起来很方便

2018-08-31

SQLiteStudio

查看SQLite数据库的工具

2017-07-27

M72-D硬件手册及AT指令集

M72-D硬件手册及AT指令集

2016-04-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除