自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 制作ubuntu根文件系统

参考文档:http://blog.csdn.net/mountzf/article/details/51707853http://developer.t-firefly.com/thread-10963-1-1.htmlhttp://rockchip.wikidot.com/porting-os折腾了几天,看了不少参考资料,终于把ubuntu根文件系统制作出来了,基本是

2017-08-03 15:15:40 6638 2

原创 C语言和指针

C语言的数组有两个值得注意的地方:① C语言中只有一维数组,并且数组的大小必须在编译期就确定为一个常数② 对于一个数组,我们只能做两件事,确定该数组的大小以及获得指向该数组下标为0的元素的指针(也就是数组名)补充:上述第二点同样适用于多为数组,例如int a[3][2],那么a表示的是一个指向a[0][ ]中下标为0 的元素的指针。而a[1]表示的是a[1][ ]数组中下标为0的元素...

2020-02-12 16:01:21 298

原创 C语言运算符优先级问题

总体的优先级顺序为:操作符 > 单目 > 双目 > 三目 操作符:函数调用、数组下标、结构体成员选择 单目: !、~、++、-、(type)、*、&、sizeof 双目:算术 > 移位 > 关系 > 逻辑 > 赋值 > 条件(三目) 如何记:① 任何一个逻辑运算符的优先级都低于任何一个关系运算符...

2020-02-12 15:58:07 521

原创 简易智能家居管理--魔镜(2):界面

0、说些废话界面开发网上有两个思路,一是传统的前端界面开发,PHP、CSS之类的,然而我并不会前端的开发,暂时也没这么多时间去折腾了,所以先采用原生的界面。二是用QT来作为跨平台的开发,先在window这边用QT creator进行界面的布局并且实现相应的功能,然后再用对应的工具将ui文件转成python程序,这样只要在树莓派上运行这个py文件就能显示界面,布局灵活方便。这种方法我倒是会,不过...

2018-09-13 00:37:59 2057 1

原创 简易智能家居管理--魔镜(1):硬件制作

0、说些废话       我是树莓派的忠实粉丝,工作之余喜欢用树莓派来制作点好玩的东西,因为这个原因,我越来越宅了,这真是个悲伤的故事。偶然间在网上看到有人用树莓派制作了一个魔镜,最开始的版本仅仅是一个界面,就是一个能显示一些信息的镜子,后来经过网友们的改良,可以做到语音识别与合成了,还有的人把它和homekit对接,用siri来控制制定的家用电器。结合对树莓派的各种应用,我决定根据我自己的需...

2018-01-19 15:26:25 4737 2

原创 QFTP的配置使用以及避免下载文件为0kb的注意事项

写在前面:之前说到在开发板上跑起了ubuntu系统之后,相比于原先的系统,简直就是鸟枪换大炮。借助于ubuntu的强大功能,对板子配置起来就太方便了。正好也解决  了之前遗留下来的问题。最近几天都是在调试QT程序。对于新手来说,确实遇到了不少坑,可能是知道的太少了,很多看似简单的问题,都卡了好久。(PS:  最近在做qt就是为了实现和板子的ubuntu系统进行跨平台的配置,也就是在Wind

2017-11-22 19:47:58 1970 1

原创 开发板更新内核

方法一、uboot界面更新1、sf  probe2、tftp uImage   (需要windows主机运行tftpd32,并且开发板能ping通主机)3、sf update  80200000 100000 $filesize方法二、根文件系统下更新。1、进入/dev 目录2、flash_erase  mtd3  0  0  (要确保根文件系统有flash_era

2017-09-19 20:30:49 1625

原创 函数指针的类型转换

我想很多人看到这个语句的时候也都是懵圈的状态,这是我在书上看到的一个很有趣的语句,一般写代码不会用到,不过好好地理解它,能加深对C语言的认识,最起码对我是有帮助的,而且后来还用上这里面的一些小技巧。1、铺垫在分析上面的语句前,我们先从简单的入手。先来区别和理解下面这两个定义。float *g(); 和float (*h) ();直接上答案:由于( )结合的优先级别高于*,

2017-09-06 10:45:46 1128

原创 DDA输出脉冲序列控制步进电机正反转(加速、减速、匀速)

宏定义:#define DI_FOWARD (1 #define DI_REVERSE (1 #define FOWARD_FREQ 1000#define REVERSE_FREQ 1000#define MAX_FREQ 2000#define ACC 20000main函数的循环:while (!exit_flag){read_iofp

2017-08-30 15:21:11 1654

原创 ubuntu下用脚本执行sudo命令免去输入密码

运行脚本进行一些操作确实省了不少事,不过我遇到一个问题,运行脚本安装一些指令的时候,提示要输入sudo密码  而且大多软件在安装包下载完毕后还需要你输入y进行确认安装。其实不用那么麻烦,在install指令中可以实现这些操作。直接上指令:echo 'yourpassword' |sudo -S apt-get -y install software1 software2 ...把y

2017-08-30 15:12:27 2967

转载 堆和栈的区别

一、预备知识—程序的内存分配    一个由C/C++编译的程序占用的内存分为以下几个部分    1、栈区(stack)—   由编译器自动分配释放   ,存放函数的参数值,局部变量的值等。其    操作方式类似于数据结构中的栈。    2、堆区(heap)   —   一般由程序员分配释放,   若程序员不释放,程序结束时可能由OS回    收   。注意它与数据结构中的堆是两

2017-08-17 09:51:25 304

原创 在ubuntu14.04上安装ROS(robot operating system)

我们给板子移植一个ubuntu根文件系统,并且安装一个lxde的桌面,目的就是为了在ubuntu文件系统上安装ros实现对机器人的控制。废话不多说,直奔主题。参考文档:http://www.cnblogs.com/liu-fa/p/5779206.htmlhttp://blog.csdn.net/huapiaoxiang21/article/details/73558795

2017-08-16 17:12:20 732

原创 在ubuntu根文件系统上安装lxde桌面

在开发板上移植并且配置好ubuntu根文件系统后,就可以通过串口或者ssh登录系统,在终端执行操作指令。可是根据我们的需求,需要图形界面的操作,所以需要安装一个桌面。网上也有一些推荐的桌面,比如说gnome、kde、xfce等,不过我们的需求也不是很复杂,就安装一个轻量级的lxde桌面。说真的,第一次做这方面的,走了很多弯路,看了很多文档、博客。慢慢地也就知道了是这么回事,现在lxde的桌面能在板

2017-08-16 16:15:29 6275 2

原创 <Linux>AM3358内核移植与根文件系统的制作

唉....当了太久的咸鱼了...遇到各种坑,翻了好多资料....杂七杂八的乱成一团。。现在抽空整理一下,以便日后可以参考。这段时间,零零碎碎地做了不少东西,先是移植了2440的uboot,内核以及根文件系统的制作,这部分有一些参考的视频,2440板子玩的人也比较多,所以参考资料相对较多。。对这一部分就不整理了。之后主要是对一块am3358的板子进行移植,这块板子的uboot我就不碰了,主要是对

2017-07-05 21:27:13 4487

原创 Linux内核启动应用程序分析(三)

在内核启动应用程序第二篇中,我们知道,无论内核直接处理默认的配置信息还是先解析配置文件再处理配置信息,都是调用new_init_action这个函数进行处理的。那我们就看一下这个函数具体要做的事情。一、解析配置文件首先定义的是几个结构体的变量,我们可以看一下这个结构体的定义:里面的成员和我们的形参一样,只是多了一个pid的成员,所谓的pid指的是进程号。接着回到new_

2017-04-23 18:38:15 732

原创 Linux内核启动应用程序分析(二)

在前面的分析中我们了解到,内核挂接到根文件系统之后,进入init_post这个函数,开始启动应用程序。在前一篇博文中,我们具体分析了init_post最终会调用run_init_process(“\sbin\init”)这个函数进入下一阶段的启动流程。请参考:http://blog.csdn.net/stephen_lu_fahai/article/details/70452434在此之前,我

2017-04-22 21:03:18 893

原创 Linux内核启动应用程序分析(一)

前面我们分析了Linux内核的启动流程,请参考:http://blog.csdn.net/stephen_lu_fahai/article/details/70162011http://blog.csdn.net/stephen_lu_fahai/article/details/70305405通过分析Linux内核的启动流程,我们知道Linux内核首先挂接到根文件系统下,接着用ini

2017-04-22 16:44:09 2264

转载 Linux内核Makefile分析

博文转自:http://blog.csdn.net/lizuobin2/article/details/51464152本文简单介绍了 Linux 内核 Makefile 的大框架,对于KBuild 系统的详细的编译过程没有作过多的分析,写的很粗犷~还请见谅。更详细的内容请参考:        嵌入式Linux应用开发完全手册        makefile.t

2017-04-22 15:40:38 525

原创 <Linux>Linux内核启动分析(二)——start_kernel

在前一篇对head.S的分析中,我们知道内核启动的第一阶段的是处理u-boot传进来的机器id,由此来判断内核是否支持这个CPU以及该单板。而head.S最后跳到start_kernel这函数中作进一步的处理。分析如下:一、start_kernel在start_kernel这个函数中首先进行一系列的初始化,咱们就先不去具体分析每一个初始化函数,主要看最后两行的的setup_arch

2017-04-20 21:46:57 1215

原创 <Linux>u-boot 命令分析并编写一个命令

一、run_command函数前面我们说到,u-boot的核心就是run_command这个函数,那么我们就来分析一下这个函数具体要做那些事情。1321行,对命令进行解析。举个例子:比如说,md.w 0这个命令,它就能解析成为:Argv[0]=”md” Argv[1]=”0那么这个代表什么意思呢?接着往下看:1327行,这个函数提取1321行解析后的参数,那就先跟踪

2017-04-18 23:42:25 854

转载 Linux 链接脚本分析

转自:http://blog.csdn.net/lizuobin2/在前面学习的过程中,看代码时遇到 arch_initcall(xxx) 等函数总是处于愣神的状态,对于最基础的 module_init(xxx) 也只是拿来用用,不知道幕后的东西,了解 MACHINE_START 创建了一个 machine_desc ,却不知道 machine_desc->map_io 等函数时何时调

2017-04-16 21:45:09 583

原创 <Linux>Linux内核启动分析(一)——head.S

之前我们说到u-boot的最终目的是将内核从flash中读出,并且启动内核。那么内核一旦开始启动之后,就没有u-boot什么事情了,控制权就交给了内核,那么先来明确一下内核要做的事情:运行用户程序,而要想运行用户程序,就得先挂接到文件系统上。下面分析内核的启动流程:这是在内核文件下arch\arm\kernel目录下的head.S文件,也是内核启动的第一个文件。79行,通过设置CP

2017-04-13 21:09:19 3704

原创 <Linux>u-boot启动Linux内核分析

通过分析u-boot的启动流程,我们可以知道,u-boot启动内核的命令是bootcmd=nand_read.jffs 0x30007FC0  kernel:bootm 0x30007FC0;也就是先吧内核读到内存上,再去启动内核。在此之前我们先来明确一个定义,nandflash上的内核成为:uImage,其格式为:一个64k的头部+真正的内核其中头部的定义如下:我们重点关

2017-04-12 19:53:54 616

原创 u-boot第二阶段启动流程分析

第一阶段的初始化结束后进入start_armboot函数,也就是进入第二阶段的初始化。下面来分析第二阶段的主要流程。在此之前,我们先来明确u-boot的目标,u-boot要做的事情是1、把内核中flash中读出   2、启动内核248行,gd_t是一个结构体指针,保存一些全局变量,这条语句是给它分配一个内存空间258行,init_sequence是一个函数指针,具体如下:也

2017-04-11 11:26:14 563

原创 u-boot第一阶段启动流程分析

此博文是在网上看了一篇文档后做的整理,若是了解ARM汇编指令的基本知识,理解本文会更加方便。对于uboot中的start.S主要做的事情就是系统各个方面的初始化,大致可以分为以下6个部分:1、设置CPU模式2、关闭看门狗3、关闭中断4、设置堆栈SP指针5、清除bss段6、异常中断处理下面按照start.S源码逐个分析以上部分1、设置CPU模式

2017-04-09 22:48:41 795

原创 理解Makefile

本次笔记是看了陈皓的《跟我一起写Makefile》而作的记录,原版链接地址如下http://pan.baidu.com/s/1skBumRF第一部分一、Makefile介绍make命令编译和链接文件的的规则是:1、如果这个工程没有编译过,那么我们所有的C文件都要编译并被链接。2、如果这个工程的某几个C文件被修改,那么我们只需编译被修改的C文件,并链接目标文件。

2017-04-08 22:01:11 627

原创 <Linux>Linux指令(不定时更新)

以下是我在操作过程中用到的一些指令及其用法。1、ls指令,用于列出当前目录的文件通过添加-l参数可以使文件以详情模式列出通过添加-a参数可以将包含隐藏文件在内的全部文件列出。用法:ls  [-l] 2、lsblk指令:除了RAM之外,以标准树状格式输出文件(常用于了解新插入的USB设备名字)可以通过添加-l参数使得文件以列表格式显示块设备用法:同上

2017-03-31 16:53:37 531

原创 <BLE>CC2540主机事件回调函数

CC2540的主机程序为我们提供了事件回调函数,即static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent ),所谓的回调函数是在GAP状态发生改变时调用,用来对GAP初始化、设备发现、设备连接、断开连接等事件进行处理。该函数是在设备初始化阶段注册的。我们跟踪simpleBLERoleCB进行查看:也就是在

2016-04-30 21:12:02 4640

原创 <BLE>CC2540主机获取各个从机广播

在蓝牙BLEcc2540的程序有一个函数用于记录周围正在发广播的蓝牙的地址,并且生成地址列表,以供后面的选择连接。我们可以对比着这个函数来写一个接受周围蓝牙从机发出的广播,并且生成相应的广播数据列表。我先来看看广播的地址在何处被接收到:在回调函数simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )中,调用接收广播地址的函数

2016-03-07 20:22:18 3585

原创 <BLE>主从切换回调函数的小实验

分享自己做的两个小实验吧。1、主从程序中,每次进入主机程序都判断是否要更新广播介绍:由于项目的需要,我在默认广播的基础上又定义了一个新的广播,每次进入从机程序时会判断打开那种广播,然后再开启广播。如图:然后写了一个判断广播的函数,如下:那么问题来了,每次切回从机程序时,如何在开启广播之前就先进入我的判断函数,答案就在peripheralStateNotificati

2016-03-02 21:13:56 1318

转载 从机广播本机的地址

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/48176695一、简介:在不连接的情况下,主机获得从机的MAC地址的方法。二、版权声明博主:甜甜的大香瓜声明:喝水不忘挖井人,转载请注明出处。原文地址:ht

2016-01-22 22:50:42 1173

原创 【蓝牙BLE】cc2540主机获取广播包存在的一些问题。

cc2540主机获取广播包的具体实现过程请参考另一篇博文《cc2540主机获取广播数据》,该博文转载自大香瓜的博客。我自己烧到板子后发现存在一些问题,可能是还没达到香瓜的大神境界,那么我就从小菜鸟的角度说一下我遇到的这个问题和解决办法吧。在主机获取广播数据过程中,香瓜主要是用到两个函数,Get_Adtype_Data和Hex_To_Str.我顺着博文做下去之后发现Hex_To_Str这

2016-01-18 10:41:52 1615

原创 <蓝牙BLE>cc2540修改动态广播

cc2540作为从机在发广播时,可以对不同的广播数据进行切换,以便于能发出一些我们自定义的广播信息。大致过程如下:一、当事件发生时,先关闭当前的广播二、对要广播的信息进行修改三、广播修改后的信息具体实现如下:1、在SimpleBLEPeripheral.c的SimpleBLEPeripheral_ProcessEvent函数中创建事件(自定义广播数据、开启广播等)

2016-01-08 10:29:02 4672

转载 <蓝牙BLE>cc2540主机读RSSI值

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/48628203一、简介本篇以TI提供的SimpleBLECentral工程和SimpleBLEPeripheral工程为例,介绍读取RSSI的方法。二、实验平台协议栈版本:BLE-CC25

2015-11-17 21:26:40 4644

转载 <蓝牙BLE>cc2540如何添加特征值

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/48314165一、简介本篇介绍从机如何添加一个可读、可写、可通知的特征值char6。(为了方便copy代码,就不大量使用截图了)二、特征值有什么用?它是一个变量或者一个数组,主从机

2015-11-13 16:03:20 4893

原创 <蓝牙BLE>关于cc2540Flash断电保存的操作

cc2540自带128k或者256k的flash内存,可以提供断电保存。将数据进行flash保存之后,在复位或者重启之后,仍能找到断电之前保存的数据。flash保存主要有以下两种方法。一、调用osal_snv_write( );和osal_snv_read( );首先添加头文件#include "osal_snv.h"然后打开OSAL文件夹下的bcomdef.h,在该文件里面自己添

2015-11-10 11:27:21 3346

转载 <蓝牙BLE>cc2540发现多个特征值句柄

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/48314165注意:有群友反馈char3和char5应该要能读到特征值句柄的,本篇没有读到,因此我有时间时再看看是怎么回事。有人知道的话麻烦告诉我一声~谢谢(这句话是大神说的,哈哈.。。。)一、简介

2015-11-06 16:36:17 3695

转载 <蓝牙BLE>如何修改蓝牙广播时间

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/48497857一、简介本篇介绍如何修改广播时间,本篇举例实现广播60S后停止广播。二、代码修改1、修改成limit模式(SimpleBLEPeripheral.c中)[cp

2015-11-06 16:33:24 2672

转载 <蓝牙BLE>cc2541发现服务与特征值

声明,本文转载自“甜甜的大香瓜”的博客,原文地址如下:http://blog.csdn.net/feilusia/article/details/46909847一、简介本篇以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的。二、实验平台协议栈版本:BLE-CC254x-1.3.2编译软件:I

2015-11-05 22:27:50 5429

转载 <蓝牙BLE>cc2540主机获取数据包

转自大香瓜的博客。一、简介本篇以SimpleBLECentral工程为例,介绍CC2541作为主机时是如何获取从机广播包数据的。二、实验平台协议栈版本:BLE-CC254x-1.3.2编译软件:IAR 8.20.2硬件平台:smart RF开发板三、简介广播包广播包是从机端发出的数据包。注:本篇

2015-11-05 22:22:51 3071

空空如也

空空如也

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

TA关注的人

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