- 博客(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 3484
原创 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 827
原创 Linux 中断
中断简介根据中断的来源,中断可分为内部中断和外部中断。内部中断的中断源来自 CPU 的内部(软件中断、溢出、除法错误等);外部中断的中断源来自 CPU 外部,由外设提出请求。根据中断是否可以屏蔽,中断分为可屏蔽中断和不可屏蔽中断(NMI,Not Masked Interrupt)。根据中断入口跳转方法的不同,中断可分为向量中断和非向量中断。向量中断由硬件提供中断服务程序入口地址,非向量
2018-01-22 13:21:02 385
原创 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 16840 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 9648 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分析
2018-09-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人