自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tracy Mcgrady的专栏

冰山一角。

  • 博客(409)
  • 资源 (16)
  • 收藏
  • 关注

原创 RT-Thread线程

1. 线程创建线程的创建可以使用rt_thread_create()函数,原型如下:rt_thread_t rt_thread_create(const char *name, void (*entry)(void *parameter), void *paramet

2018-02-05 16:40:07 1381

原创 RT-Thread初探

试验平台:正点原子探索者STM32F407开发板一、RT-Thread介绍RT-Thread是由国内开发者主导开发的一款开源嵌入式实时操作系统,它包含:操作系统内核、TCP/IP协议栈、文件系统、libc接口,图形引擎等等。RT-Thread官网:https://www.rt-thread.org/代码地址:https://github.com/RT-Thread/rt-thread二、RT-Th...

2018-02-01 16:55:53 8240 2

原创 libopencm3库的使用

libopencm3是开源的cortex-m系列单片机的固件库,支持stm32、atmel、nxp等等系列单片机。在Linux下编译需要交叉编译器gcc,从这里下载:https://launchpad.net/gcc-arm-embedded/+download,下载编译好的Linux下的版本就可以了。解压缩,设置环境变量,使用arm-none-eabi-gcc -v命令测试一下设

2017-11-10 17:32:49 5297

原创 第九篇 蓝牙配对

不管是经典蓝牙也好,还是BLE也好,配对方式都有四种,分别是:1. Numeric Comparison2. Just Works3. Out of Band4. Passkey Entry而ble_app_template这个工程默认是采用的Just Works这种配对方式,这种方式是不需要配对码的,也就是直连的。而这里我们要改成使用动态密码方式进行配对,也就是P

2017-11-02 14:05:01 3514

原创 第八篇 uCGUI的移植

uCGUI版本:v3.98屏:OLED前面显示字符串我们自己定义了一个字库,uCGUI中肯定也是有字库支持的,这里的移植目标也是调用GUI_DispString()函数后能正确显示出字符,这里不会将uCGUI的所有功能添加进工程中,所以还是以显示字符为前提。首先将uCGUI中的Start/GUI和Start/Config两个目录拷贝到项目中。然后将Sampl

2017-09-21 16:51:21 4544 2

原创 第七篇 OLED屏

OLED即Organic Light-Emitting Diode,相比LCD的屏,LCD屏需要背光,而OLED不需要,因为它本身就是发光的。开发板上的屏使用的驱动IC是SSD1306,支持并口、I2C和SPI等接口,可以根据自身需要进行灵活的配置。具体是使用的哪种接口,是通过芯片BS0、BS1、BS2三个引脚来控制的,如图所示:另外,我拿到的屏是配置成四线SPI接口的,而不是

2017-09-15 18:29:07 3690 3

原创 第六篇 蜂鸣器和app_timer

开发板上的蜂鸣器是有源的,所以控制上相对比较简单,要让蜂鸣器出声,只需要把控制gpio口拉高就可了。什么时候关闭蜂鸣器呢?有两种办法,一是在打开蜂鸣器之后加上一段延时,然后再关闭蜂鸣器。二是使用timer,加延时不好的地方在于蜂鸣器发声之后cpu就不能做其他工作了,在有些情况下会影响用户体验,所以呢,这里需要使用timer来控制。在蓝牙样板程序中已经有app_timer的初始化,对

2017-09-12 11:11:23 2011

原创 第五篇 按键

实际上在蓝牙样板程序中已经包含了按键部分的初始化,我们只需要根据自己的板子做很少的配置工作,buttons_init()函数如下:static void buttons_init(void){ // Note: Array must be static because a pointer to it will be saved in the Button handler //

2017-09-11 16:32:37 549

原创 第四篇 串口通信

在单片机程序开发中除了单步调试外,最有效的调试方法算是打印调试了,所以这里先把串口功能调试好,也方便以后的调试开发。nRF51822带有一个UART接口,但是没有固定的TX、RX引脚,是可以任意配置到不同的IO引脚上,这也为硬件上连线提供了方便。Ok,我们在蓝牙样板程序中增加UART功能。首先是串口初始化,串口初始化可以使用simple_uart.c提供的simple_ua

2017-08-27 18:17:11 1963

原创 第三篇 蓝牙工程样例模板

如何使用nRF8122来开发蓝牙应用呢?实际上在安装了Keil的nRF8122软件支持包之后,在Keil目录下,有蓝牙开发的模板示例程序,目录为:C:\Keil\ARM\Device\Nordic\nrf51822\Board\nrf6310\s110\ble_app_template这个程序是Nordic为蓝牙开发者提供的一个模板程序,这个程序是能够直接编译成功的。先Down

2017-08-25 09:03:40 1761

原创 第二篇 点亮led灯

在上一篇,开发环境建立好了,那么接下来开发一个简单的应用,点亮一个led灯。首先新建一个工程,Device选择nRF51822_xxAA。工程建立好之后,接下来编写一个main.c来点亮led灯,代码如下:#include #include #define LED_INDEX 16void init_led(void){ nrf_gpio_cfg_output(LED

2017-08-22 11:40:30 3817

原创 第一篇 开发环境的建立

开发环境:Windows7 + 青云蓝牙开发套件nRF51822是由挪威Nordic公司推出的低功耗蓝牙解决方案,基于Cortex M0内核,开发环境使用的是Keil软件。那么首先是安装Keil,光盘中给了一个4.7的Keil版本,直接安装就可以了。然后是需要破解,使用keygen生成一个License ID然后添加进去就可以了。官方提供的Keil软件并不支持nRF

2017-08-22 11:34:02 469

原创 Linux driver oops异常的处理

如果Linux驱动里面出现了oops异常,这种情况如何快速定位到底什么原因引起的呢,需要对驱动debug。例如:#include #include static int __init hello_init(void){ int *p = NULL; *p = 0; return 0;}static void __exit hello_exit(void){}mo

2017-04-07 16:27:05 3395

原创 C++引用

一. C++中的引用引用(reference)实际上是为对象定义了一个别名,主要用作函数的形参。引用通过在变量名前加上"&"符号来定义。例如:int ival = 1024;int &refVal = ival; // ok: refVal refers to ivalint &refVal2; // error: a reference must be initia

2016-11-30 17:16:38 398

原创 Android权限问题

SELinux是什么?即Security-Enhanced Linux,是由美国国家安全局(NSA)发起,基于Linux开发的一个安全增强系统,旨在提高系统的安全性。而SEAndroid基于SELinux,在Android5.0上被正式启用。SELinux有3种操作模式,分别是Disabled、Permissive、Enforcing,在android中可以通过输入adb命令get

2016-11-18 16:28:53 1989 1

原创 mtk平台充电器检测

平台:mt6735 5.1首先来看BAT_thread()。void BAT_thread(void){ static kal_bool battery_meter_initilized = KAL_FALSE; if (battery_meter_initilized == KAL_FALSE) { battery_meter_initial(); /* move from b

2016-11-04 16:34:33 7522 4

原创 mtk电池温度检测

平台:mt6735+mt6328 Android版本:Android5.1手机里面电池通常有4个引脚,即电池的+、-极,ID引脚、NTC引脚。id引脚用来识别电池的类型,例如是锂电池还是镍氢电池,不过现在手机上基本用的都是锂电池了。而NTC引脚主要用来测量电池温度的,还可以用来检测手机有没有按上电池,那么这里就来说明这两个功能。1. 电池检测在mt6735+mt6328平台方案

2016-10-14 18:29:55 10142

原创 ALSA lib调用实例

1. Display Some PCM Types and Formats#include int main() { int val; printf("ALSA library version: %s\n", SND_LIB_VERSION_STR); printf("\nPCM stream types:\n"); for (val = 0; val

2016-09-22 10:31:55 3027

原创 ubuntu 12.04安装alsa-lib、alsa-utils

1. alsa-lib./configuresudo make install注意:默认是安装到/usr/这个目录下面,但是我测试多了多次,安装了alsa-lib之后,系统就没有声音了,也没有找到是什么原因。不得已,先安装到其他目录试试:./configure --prefix=$HOME/alsa-lib/make && make install2. alsa-u

2016-09-11 12:42:21 6473 1

原创 wav音频文件格式解析

wav是微软开发的一种音频文件格式,注意,wav文件格式是无损音频文件格式,想对于其他音频格式文件数据是没有经过压缩的,通常文件也相对比较大些。文件格式如图所示:解析代码如下:#include #include #include struct WAV_Format { uint32_t ChunkID; /* "RIFF" */ uint32_t ChunkSize

2016-09-11 09:07:56 20473 3

原创 Linux Completion

内核版本:Linux-4.5在Linux驱动程序中,有时需要等待一个事件的完成,就需要用到completion机制,需要包含头文件completion类型定义如下:struct completion { unsigned int done; wait_queue_head_t wait;};说明completion使用等待队列来实现的。可以使用宏DECLARE_C

2016-08-04 15:22:23 630

原创 SPI协议

参考:https://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bushttps://en.wikipedia.org/wiki/Serial_Peripheral_Interface_BusSPI(Serial Peripheral Interface)是一种用于短距离的同步串行通信协议,由Motorola开发。SPI通常

2016-07-18 11:58:39 2169 1

原创 mtk camera加载流程

平台:mt6735从imgsensor_drv.cpp中的impSearchSensor()函数说起。MINT32ImgSensorDrv::impSearchSensor(pfExIdChk pExIdChkCbf){ MUINT32 SensorEnum = (MUINT32) DUAL_CAMERA_MAIN_SENSOR; MUINT32 i,id[KDIMGS

2016-07-04 12:06:45 6126

原创 Linux wakelock与autosleep

内核版本:Linux-4.5. wakelockLinux kernel在3.4及以后的版本中加入了wakelock机制,作用同之前的Android内核一样:1. 为应用层提供接口来创建、释放wakelock2. 在driver中,同样也可以创建、释放wakelock3. 当所有的wakelock都释放掉之后,系统可以自动进入低功耗状态,由autosleep来实现

2016-06-21 11:41:51 3457

原创 Line Disciplines

在Linux tty子系统中,Line Disciplines处在底层驱动与上层应用的之间,先来看一个例子:#include #include #include #include static int my_ldisc_tty_open(struct tty_struct *tty){ printk("%s\n", __func__); if (tty->ops->write

2016-05-29 19:51:03 1304

原创 关于i2c_register_board_info()函数

i2c_register_board_info()函数用于往__i2c_board_list这条链表添加一条i2c设备信息,在i2c adapter注册的时候,会扫描__i2c_board_list链表,然后调用i2c_new_device()函数来注册i2c设备,注意,要先于i2c adapter注册之前就添加好i2c设备信息,否则会出现调用了i2c_register_board_info()函

2016-04-30 22:13:14 9592 1

原创 关于i2c_smbus系列函数

内核版本:linux-4.5i2c_smbus系列函数有:s32 i2c_smbus_read_byte(const struct i2c_client *client);s32 i2c_smbus_write_byte(const struct i2c_client *client, u8 value);s32 i2c_smbus_read_byte_data(const struc

2016-03-24 12:41:03 31837 7

原创 mini2440 i2c设备支持

内核版本:linux-2.6.32.2 实验平台:mini24401. 添加主控设备支持i2c主控制器也是一个设备,只是在内核被虚拟成了一个平台设备,平台设备在内核中已经被定义了,定义在plat-s3c/dev-i2c0.c中:static struct resource s3c_i2c_resource[] = { [0] = { .start = S3C_PA_IIC,

2016-03-22 22:41:24 1589

原创 关于dev_set_drvdata()和dev_get_drvdata()

内核版本:Linux-4.5dev_set_drvdata()和dev_get_drvdata()代码如下:static inline void *dev_get_drvdata(const struct device *dev){ return dev->driver_data;}static inline void dev_set_drvdata(struct device

2016-03-18 15:08:46 9505

原创 rust

根据百度百科的解释:Rust是Mozilla开发的注重安全、性能和并发性的编程语言。rust官网:https://www.rust-lang.org/1. 安装从官网下载安装包,我这里下载的安装包名字是:rust-1.6.0-x86_64-unknown-linux-gnu.tar.gz然后解压,进入rust目录,根据README提示,执行sudo ./install.sh命令

2016-03-02 14:42:56 826

原创 mongodb

mongodb官网:https://www.mongodb.org1. 安装可以在官网下载安装包,下载完成之后,解压,然后将bin目录中的所有文件都拷贝到/usr/local/bin目录下。2. 启动mongodbmongodb默认将/data/db作为数据库的存储路径,所以首先需要创建这个目录:sudo mkdir -p /data/db然后使用sudo mo

2016-03-02 13:51:29 583

原创 libpq简单示例

libpq是什么呢?英文原话是:libpq is the C application programmer’s interface to PostgreSQL,原来是postgresql的c语言应用程序接口,postgresql的官网是:http://www.postgresql.org/。1. postgresql安装在ubuntu下,使用下面的命令(12.04)来安装:sudo

2016-03-01 14:36:55 4985

原创 vala

根据百度百科的解释,vala是一种新的、为GNOME开发者提供的具有现代化编程语言功能的一种编程语言。1. 安装在ubuntu下安装很简单,使用命令sudo apt-get install valac-0.16(12.04版本),测试valac编译器的版本号,可以输入valac --version命令。2. HelloWorld程序class Demo.HelloWorld :

2016-02-29 17:08:45 2208

原创 stm8 clock

stm8时钟源有4种:1. 16MHz的高速内部时钟源HSI2. 1到16MHz的高速外部时钟源HSE3. 32.768KHz的低速外部时钟源4. 38KHz的低速内部时钟源这4种时钟源都可以作为系统时钟,大家也可以用示波器量一下59引脚,看输出的的时钟频率是否正确,在量之前需要做如下设置:void main(void){ GPIO_Init(GPIOC, GPIO_P

2016-02-25 14:01:03 1655

原创 stm8 rtc时钟

stm8 rtc时钟可以使用内部低频时钟源,或者外部低速32768Hz时钟源,关于rtc部分代码如下:#include #include void init_rtc(void){ RTC_InitTypeDef RTC_InitStr; RTC_TimeTypeDef RTC_TimeStr; RTC_DateTypeDef RTC_DateStr;#if 1 /* LSI *

2016-02-17 17:21:59 13248 1

原创 关于c使用assert

assert宏原型定义在中,原型如下:void assert(scalar expression);其中作用是如果表达式为false,首先向stderr打印一条错误信息,然后使用abort()函数来终止程序的运行,例如:char *strcpy(char *dest, const char *src){ char *tmp = dest; assert(dest != NULL);

2016-01-29 13:54:46 744

原创 nmealib代码分析

从之前的samples/parse/main.c开始。以其中的一条GPGGA语句为例。nmeaINFO结构汇总的是gps数据信息,里面包括utc时间、定位状态、质量因子、经纬度、速度、方向等信息,之所以说是汇总,那是因为这里是对所有的nmea语句进行解析,然后将相应的数据赋值到该结构中,而不仅仅是其中的一条nmea语句,因为一条nmea语句不可能包括所有的gps信息。nme

2016-01-18 10:01:41 3422

原创 GPS nmealib

nmealib是基于nmea协议的一个开源库,不仅可以解析nmea语句,还可以产生nmea语句,测试代码如下:#include #include int main(void){ const char *buff[] = { "$GPGSV,2,2,07,29,28,104,36,31,56,324,12,32,38,293,15*4E\r\n", "$GPGLL,3110.856

2016-01-14 17:45:34 2388

转载 c printf

原文链接:http://www.cplusplus.com/reference/cstdio/printf/functionprintfint printf ( const char * format, ... );Print formatted data to stdoutWrites the C string pointed by f

2016-01-05 16:52:20 640

原创 object-c ubuntu下开发环境搭建

1. 安装gnustep和gobjcsudo apt-get install gnustep gnustep-devel gobjc2. 示例代码#import int main (int argc, const char * argv[]){ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

2016-01-04 14:21:11 1345

ubox gps协议

本文档是ubox gps协议的详细介绍,在于对nmea语句的了解。

2016-01-18

hx8389b datasheet

hx8389b datasheet,方便做mipi开发的朋友们。

2015-01-05

J-Flash s3c2440的配置文件

用于J-Link J-Flash的2440配置文件,可用于mini2440 micro2440等开发板。

2014-07-05

led.tar.gz

sdcc使用Makefile的led工程实例

2014-01-13

sdcc-3.3.0-i386-unknown-linux2.5.tar.bz2

sdccc Linux x86二进制包。

2014-01-02

intel MCS51 MICROCONTROLLER FAMILY USER'S MANUAL

Intel 8051编程手册,对学习51的很有帮助

2012-11-17

u-boot nor flash驱动

u-boot的完整nor flash驱动,nor flash型号为sst39vf1601。

2012-06-01

编程修养-陈皓

讲述编程中需要注意的问题,如何提高自己的编程技术,自己编写的代码更稳定、易读、规范、易维护、专业。

2012-05-19

ARM汇编手册

arm汇编手册,对arm汇编学习很有帮组

2011-12-31

TDS1000B系列用户手册

TDS1000B系列 数字存储示波器 用户手册

2011-12-16

ARM Architecture Reference Manual

本手册介绍符合 ARMv4 和 ARMv5 标准的处理器的指令集、内存模型和程序员模型,这类处理器包括: * ARM7 * ARM9 * ARM10 * StrongARM * Intel XScale * Marvell Feroceon 产品系列 本手册还介绍最初的 ARMv6 体系结构版本。Thumb-2 或 TrustZone 安全扩展的内容不包含在本手册中。

2011-12-05

64-ia-32-architectures-software-developer

Intel处理器软件开发参考手册,对于理解Intel体系架构,以及汇编程序编程都有帮助

2011-12-02

Linux汇编教程

Linux下AT&T语法汇编教程,讲AT&T语法汇编比较少,讲的好的就更少了

2011-11-29

AT&T语法汇编教程

Linux下AT&T语法汇编程序教程,将AT&T语法书比较少,好的书就更少了

2011-11-28

深入理解计算机系统

以程序员角度理解计算机系统知识,适用于那些想要写出更快、更可靠程序的程序员。

2011-11-28

QT编程艺术

QT编程艺术,个人觉得比较好的QT编程书籍

2011-11-20

空空如也

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

TA关注的人

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