自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逆水东流

道可道。非常道。

  • 博客(57)
  • 收藏
  • 关注

原创 (CortexM3)bit-banding

Cortex-M3 Bit-Banding1. 概述CM3的存储器系统支持所谓的“位带”(bit-band)操作。 通过它,实现了对单一bit的原子操作。位带操作仅适用于一些特殊的存储器区域中。 从汇编角度看: 与传统方法的比较: 在位带区中,每个比特都映射到别名地址区的一个字——这是个只有 LSB才有效的字。支持位带操作的两个内存区的范围是: **0x2000_0000-0x

2016-12-12 10:51:51 625

原创 (linux)LED子系统

数据结构(/include/linux/leds.h)enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255,};led_classdev代表led的实例:struct led_classdev { const char *name;

2016-09-17 23:22:43 848

原创 cygwin添加到windows右键菜单

cygwin添加到有右键菜单前提为了在windows中使用cygwin编译指定文件代码更为方便,所以动心思琢磨把cygwin添加到右键菜单,百度了一下,发现很多这样的教程,但是有问题,比如添加了但是右键点击文件夹名并没有cd跳转到该文件名目录下,不断尝试后发现了更好的路径方法。添加右键菜单开始->运行->regedit; 在HKEY_CLASSES_ROOT\Directory\Backgroun

2016-09-09 20:12:39 5706

原创 (linux)BSP板级支持包开发理解

嵌入式系统由硬件环境、嵌入式操作系统和应用程序组成,硬件环境是操作系统和应用程序运行的硬件平台,它随应用的不同而有不同的要求。硬件平台的多样性是嵌入式系统的主要特点,如何使嵌入式操作系统在不同的硬件平台上有效地运行,是嵌入式系统开发中需要解决的关键问题。解决的方法是在硬件平台和操作系统之间提供硬件相关层来屏蔽这些硬件的差异,给操作系统提供统一的运行环境......

2016-07-23 22:29:00 8099

原创 (C)结构数组

对于大小相同但是类型不同的数组,定义结构体数组对其很有帮组.例如: char *keyword[NKEYS]; int keycount[NKEYS];这两个数组大小相同,因此 可以用另一种不同的组织方式,也就是结构数组.形如: struct key{ char *word; int count; }keytab[NKE

2016-07-07 11:59:18 756

原创 (C)位字段(bit-field)

在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器)经常需要从字的分值中读取数值. 通常采用的方法是:定义一个于相关位的位置对应的”屏蔽码”集合, 如: #define KEYWORD (1<<0) #define EXTRENAL (1<<2)

2016-07-07 11:57:57 1979

原创 (C)非局部跳转语句(setjmp和longjmp)

非togo语句在函数内实施跳转,而是在栈上跳过若干调用帧,返回到当前函数调用路径上的某一语句. 头文件包含#include Void longjmp(jmp_buf env,int val);

2016-07-07 11:56:42 381

原创 (C)volatile关键字

如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。 下面举例说明。在DSP开发中,经常需要等待某个事件的触发,所以经常会写出这样的程序:short fla

2016-07-07 11:52:18 228

原创 (C)strcpy ,strncpy与strlcpy

1. 背景好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。 但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。2. strcpystrcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。 strcpy 常规的实现代码如下:char * strcpy(char *to, const char *from){

2016-07-07 11:38:16 300

原创 (C)理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))

1. 理解嵌入式系统编程,要求程序员能够利用C语言访问固定的内存地址。 既然是个地址,那么按照C语言的语法规则,这个表示地址的量应该是指针类型。所以,知道要访问的内存地址后,比如0x57000040(这儿的addr就是内存地址0x57000040) 第一步是要把它强制转换为指针类型 (unsigned int*)(0x57000040);所以0x57000040强制转换为指向unsigned

2016-07-07 11:12:52 1446

原创 数字音频技术

声音是通过一定介质传播的连续的波 重要指标: 振幅:音量的大小 周期:重复出现的时间间隔 频率:指信号每秒钟变化的次数

2016-07-01 14:45:34 933

原创 Ruby入门笔记

Ruby入门

2016-07-01 14:43:21 336

原创 python学习笔记

python

2016-07-01 14:38:28 321

原创 ucos ii笔记

ucos ii给实时系统开发提供一个简易的框架,其实现基本的系统管理功能。开发者需要做的是根据自己的平台修改和剪裁。需要设计中修改的如处理器的位数,开中断和关中断实现等。调通基本的系统,就可以在上面根据需要开发更多的功能。

2016-07-01 14:36:15 1131

原创 蓝牙BlueTooth技术学习理解

Bluetooth SIG 蓝牙技术联盟,非盈利组织.主要任务是发布蓝牙规格、管理资格认证程序、保护蓝牙商标及宣传蓝牙无线技术.蓝牙SIG的官网: www.bluetooth.org蓝牙技术应用网站: http://www.bluetooth.com

2016-07-01 14:32:36 1107

原创 FAT和EXFAT文件系统

文件系统 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法.在移动存储设备上比较常用的有FAT文件系统和ExFAT文件系统。 FAT分区依据FAT表中每个簇链的所占位数分为fat12、fat16、fat32三种格式; exFAT是为了解决FAT32等不支持4G及其更大的文件而推出的文件系统。

2016-07-01 14:30:40 10245

原创 深入理解计算机操作系统(笔记)

1.实时系统概念 2.编译连接 3.AT&T汇编指令学习(GCC) 4.内存对齐 5.Big-Endian大端模式和Little-Endian小端模式

2016-06-17 15:15:32 11028

转载 uCOS-II模拟(VS2010&WIN32)

转自http://www.amobbs.com/thread-5462878-1-1.html

2016-04-02 00:41:42 4486

原创 MIPS汇编指令集

MIPS汇编MIPS指令集 MIPS指令集属于精简指令集 MIPS的所有指令都是32位,指令格式简单,而X86的指令长度不是固定的。 简单的指令和格式易于译码和流水线操作,但是代码密度不高,导致二进制文件大 MIPS有32个通用寄存器REG,为什么是32个而不是更多呢? 因为更多的寄存器需要更多的指令空间对寄存器编

2016-03-30 16:55:37 20979

原创 实时系统概念

实时系统概念前后台系统后台是各种面向硬件的程序,如中断,定时器,gpio等。 前台是:main(){ while(1) { }}循环中不断调用各种函数实现功能。代码临界段只处理时不可分割的代码,一旦这部分代码运行就不可以打断、 为了确保代码能正常运行,进入临界段代码钱需要关中断,执行完后再开中断。任务一个任务也就是一个线程,是一个简单的程序。 任务间通信最简单的办法是

2016-03-30 16:53:15 411

原创 I2S总线

I2S总线Inter IC Sound总线又称集成电路内置音频总线。I2S对数字音频设备之间的音频数据传输而制定的一种总线标准。采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。I2S模型I2S有3个主要信号1).串行时钟SCLK,也叫位时钟(BCLK),即对应数字音频的每一位数据,SCLK都有1个脉冲。SCL

2016-03-30 15:31:12 638

原创 gitbash使用

gitbash是什么git bash是Windows下的命令行工具。 基于msys GNU环境,有git分布式版本控制工具。 主要用于git版本控制,上传下载项目代码。 GNU环境,就是说如果你喜欢linux/unix的环境,就可以选择使用git bash。 里面有你熟悉的linux工具,tar,grep,awk等,且可以安装编译环境gcc,make等。参考: msys:http://ba

2016-03-21 11:06:44 12471

转载 (C++)inline关键字

背景(C&C++中) inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。

2016-03-21 10:33:47 247

转载 (linux)main.c中的初始化

head.s在最后部分调用main.c中的start_kernel() 函数,从而把控制权交给了它。 所以启动程序从start_kernel()函数继续执行。这个函数是main.c乃至整个操作系统初始化的最重要的函数,一旦它执行完了,整个操作系统的初始化也就完成了。 如前所述,计算机在执行start_kernel()前处已经进入了386的保护模式......

2016-03-21 10:08:49 603

原创 (C)do{...}while(0);的用法及意义

linux内核和其他一些开源的代码中,经常会遇到这样的代码:do{ ...}while(0)这样的代码一看就不是一个循环,do..while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{…}while(0)的作用远大于美化你的代码。

2016-03-18 10:25:22 518

原创 (C/C++)struct结构体

对程序员的经验进行评估可以通过看其对struct结构体的使用情况。 会不会用struct,怎样使用struct,是区别一个开发人员是否具备丰富开发经历的标志。 在嵌入式系统的C/C++代码编程中,经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,表现形式就是结构体。而经验不足的开发人员使用char型数组,通过指针偏移的方式进行报文传送。这样做一编写复杂,出错率高,可

2015-07-22 14:59:33 499

原创 (C)字节对齐#pragma pack()

为什么要进行对齐对于结构体,编译器会自动进行成员变量对齐处理,是为了提高运算效率。 缺省情况下是自然对齐方式。自然对齐即默认对齐,按照结构体的成员中size最大的成员进行对齐。 例:struct naturalalign{ char a; short b int c;};上述结构体,成员size最大的是c,sizeof(c)为4,因此,结构体中的成员都以4为单位进行对

2015-07-22 12:48:10 382

转载 常用bluetooth协议

HFP: HFP(Hands-free Profile),让蓝牙设备可以控制电话,如接听、挂断、拒接、语音拨号等,拒接、语音拨号要视蓝牙耳机及电话是否支持。 HSP: HSP 描述了 Bluetooth 耳机如何与计算机或其它 Bluetooth 设备(如手机)通信。连接和配置好后,耳机可以作为远程设备的音频输入和输出接口。 这是最常用的配置,为当前流行支持蓝牙耳机与移动电话使用。 它依赖于

2015-07-20 18:57:14 737

转载 (C/C++)register关键字

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问,以提高效率。

2015-07-03 13:48:29 738

转载 (C)*p++和*++p区别

通过示例彻底理解自增运算符的两种用法(自减的用法与之类似,只不过是加1变成了减1)。

2015-04-10 16:30:44 600

转载 likely和unlikely函数

     在Linux内核中likely和unlikely函数有两种(只能两者选一)实现方式,它们的实现原理稍有不同,但作用是相同的,下面将结合linux-2.6.38.8版本的内核代码来进行讲解。    1、对__builtin_expect的封装    它们的源代码如下: [cpp]view plaincopyprint?/* linux-2

2015-04-10 16:26:31 408

转载 idr机制(integer ID management)

最近研究进程间通信,遇到了idr相关的函数,为了扫清障碍,先研究了linux的idr机制。        所谓IDR,其实就是和身份证的含义差不多,我们知道,每个人有一个身份证,身份证只是 一串数字,从数字,我们就能知道这个人的信息。同样道理,idr的要完成的任务是给要管理的对象分配一个数字,可以通过这个数字找到要管理的对象。 ID ----------------

2015-04-10 16:16:33 1361

转载 INIT_WORK和INIT_DELAYED_WORK详解

朋友,你相信,一只蝴蝶在北京拍拍翅膀,将使得纽约几个月后出现比狂风还厉害的龙卷风吗?看过那部经典的影片蝴蝶效应的朋友们一定会说,这不就是蝴蝶效应吗.没错.蝴蝶效应其实是混沌学理论中的一个概念.它是指对初始条件敏感性的一种依赖现象.蝴蝶效应的原因在于蝴蝶翅膀的运动,导致其身边的空气系统发生变化,并引起微弱气流的产生,而微弱气流的产生又会引起它四周空气或其它系统产生相应的变化,由此引起连锁反应

2015-04-10 16:10:59 537

转载 mmc驱动的读写过程解析

  mmc io的读写从mmc_queue_thread()的获取queue里面的request开始。 先列出调用栈,看下大概的调用顺序, 下面的内容主要阐述这些函数如何工作。host->ops->request() // sdhci_request()mmc_start_request()mmc_start_req()mmc_blk_issue_rw_rq

2015-04-08 11:36:22 2106 1

转载 LED子系统

============================================作者:yuanluluhttp://blog.csdn.net/yuanlulu版权没有,但是转载请保留此段声明============================================  数据结构/include/linux/leds.henum le

2015-04-07 20:26:58 384

转载 container_of()宏

  在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr:        the point

2015-04-07 14:17:28 275

转载 tasklet

                                                               taskletTasklet的使用比较简单,只需要定义tasklet及其处理函数并将两者关联例子:Void my_tasklet_func(unsigned long)DECLARE_TASKLET(my_tasklet.my_tasklet_f

2015-04-07 11:24:50 381

转载 自旋锁及其衍生锁

自旋锁自旋锁(spinlock)是用在多个CPU系统中的锁机制,当一个CPU正访问自旋锁保护的临界区时,临界区将被锁上,其他需要访问此临界区的CPU只能忙等待,直到前面的CPU已访问完临界区,将临界区开锁。自旋锁上锁后让等待线程进行忙等待而不是睡眠阻塞,而信号量是让等待线程睡眠阻塞。自旋锁的忙等待浪费了处理器的时间,但时间通常很短,在1毫秒以下。   自旋锁用于多个

2015-04-07 11:10:55 380

转载 platform_driver_probe与platform_driver_register的区别

[驱动注册]platform_driver_register()与platform_device_register()      设备与驱动的两种绑定方式:在设备注册时进行绑定及在驱动注册时进行绑定。 以一个USB设备为例,有两种情形:(1)先插上USB设备并挂到总线中,然后在安装USB驱动程序过程中从总线上遍历各个设备,看驱动程序是否与其相匹配,如果匹配就将两者邦定。

2015-04-07 11:01:19 548

转载 wake_lock机制

Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。本文主要分析driver层wake_lock的实现。一、wake_lock 定义和接口[cpp] view pla

2015-04-03 11:05:37 919

AD7689通用驱动C语言代码

#define AD7689_CFG_CFG_MSK NO_OS_BIT(13) #define AD7689_CFG_INCC_MSK NO_OS_GENMASK(12,10) #define AD7689_CFG_INX_MSK NO_OS_GENMASK(9,7) #define AD7689_CFG_BW_MSK NO_OS_BIT(6) #define AD7689_CFG_REF_MSK NO_OS_GENMASK(5,3) #define AD7689_CFG_SEQ_MSK NO_OS_GENMASK(2,1) #define AD7689_CFG_RB_MSK NO_OS_BIT(0) /** * @enum ad7689_device_id * @brief Device ID definitions */ enum ad7689_device_id { /** 16-Bit, 8-Channel, 250 kSPS PulSAR ADC */ ID_AD7689, /** 16

2024-02-25

空空如也

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

TA关注的人

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