加载中…
请输入标题
暂无内容
个人资料
BigSam78
BigSam78
  • 博客等级:
  • 博客积分:0
  • 博客访问:578,755
  • 关注人气:168
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
访客
加载中…
好友
加载中…
评论
加载中…
留言
加载中…
博文
(2017-03-23 16:11)
标签:

linux

char

int

分类: C
作者: Sam (甄峰)  sam_code@hotmail.com

0.
之前对窄数据类型向宽数据类型转换转换时,符号扩展,零扩展稍有了解,具体什么时候用符号扩展,什么地方用零扩展,并不清楚。所以常用按位与(&) 按位或(|) 等操作来保证扩展部分与编程思路的统一。

这次在使用iBeacon协议时,信号强度的dbm值保存在一个字节中。有时作为原码,有时又要求补码。为了验证,常要printf出来。 这下就要求把零扩展和符号扩展搞清楚。


1. 何时使用零扩展,何时使用符号扩展:
当窄数据类型为:有符号数据类型时,扩展为宽数据类型时,使用符号扩展。
当窄数据类型为:无符号数据类型时,扩展为宽数据类型时,使用零扩展。

例1: 有符号数扩展(符号扩展)
int8_t rssi = 0xBE;
int rssi_4byte = 0;

rssi_4byte = rssi;
解析:
rssi为8位有符号数,则使用符号扩展。
0xBE:   10111110B. 最高位为1。所以使用1扩展到其
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-03-16 21:28)
标签:

ble

分类: Bluetooth
作者:Sam(甄峰)  sam_code@hotmail.com

非常久没有看Bluetooth了。这次又需要在Linux下读取iBeacon广播消息。现在记录一些必要的信息如下:


1. BLE报文结构:


1. 前导

  前导是一个8比特的交替序列。他不是0101

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

autoconf

configure

分类: linux
作者:Sam (甄峰) sam_code@hotmail.com

使用autoconf 交叉编译时,会遇到非常多异常。Sam一向是强行改过来就好。但也知道这不是正规做法。现在把一些做法记录如下:


问题1:
CC=arm-linux-gnueabihf-gcc ./configure --host=arm-linux
报错:
checking for growing stack pointer... configure: error: in `/home/sam/work/current/Source/Robot_ROS/Bluetooth/3rdParty/glib-2.51.0':
configure: error: cannot run
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

pkg-config

分类: linux
作者:Sam (甄峰)  sam_code@hotmail.com

在研究autoconf时,必然要研究到pkg-config,它非常好用。在x86-64系统下能极大的方便编译。但Sam一直没有找到它在交叉编译时该如何正确的起作用。这次就探讨一下。

1. pkg-config基本作用和用法:
1.1: 背景:
很多软件包会被其它程序使用,在此过程中,需要指定头文件位置,库文件,库文件位置等信息。如果单纯手写如下: -I/usr/include/  -lglib -L/usr/lib/ 其一是容易出错,另外,很多包在yum install, apt-get install后头文件和库文件的位置,和使用源码编译,make;make install 的位置也并不一定一致。再加上还有版本问题。所以就有了pkg-config.
pkg-config主要作用是:
  1. 检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。
  2. 获得编译预处理参数,如宏定义,头文件的位置。
  3. 获得链接参数,
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

bluez

分类: linux
作者: Sam (甄峰)  sam_code@hotmail.com

之前把BlueZ 5.43在Fedora20上编译 X86 版本的过程一代而过,其实这里面还是有内容的。这次把它补上。

0. Download : 
http://www.bluez.org/
下载最新版本:当前是Bluez  5.43

1. 开始编译:
1.1:首次尝试:
$ ./configure
configure: error: GLib >= 2.28 is required
使用$rpm -qa |grep glib
glib-1.2.10-40.fc20.x86_64

可以看到,并非没有安装glib, 而是glib版本不够高。当前系统安装版本为1.2.10. 但BlueZ 需要的版本是2.28以上。






1.2: 开始编译Glib:
1.2.1:下载编译glib:
与之前的下载不同(git clone https://github.com/GNOME/gli
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: Bluetooth
作者:Sam (甄峰)   sam_code@hotmail.com

之前屡次编译BlueZ(http://blog.sina.com.cn/s/blog_602f87700100zb47.html). 中间有段时间以为不会再编译BlueZ了,其一是Android使用自己的Blue协议栈(BluetDroid)取代了BlueZ。其二是Bluetooth不再是工作重心。没想到搞ROS后,又回到Linux环境,再次需要编译Bluez.  这个令人不快的任务又一次放在面前。


0. Download BlueZ
http://www.bluez.org/

1. X86 Version make
sudo apt-get install systemd
sudo apt-get install libical-dev
sudo apt-get install libudev-dev

$./configure
$make

注意,如果没有 --enable-library,不会编译出动态或静态库的。

$./configure --enable-shared --enable-static --enable-library
$make clean;make

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
分类: C
作者:Sam (甄峰)  sam_code@hotmail.com

在Linux Kernel或一些GNU项目中,可以看到长度设定为0的数组。之前没有深究,这次研究一下。
以下内容大量摘抄网上信息。

标准C和C++不支持0长度数组。如果定义0长数组。编译阶段就会报错。但GNU C支持零长数组,条件是作为结构体的最后一项。

但这一项因为长度为0,所以不占空间。

举例如下:

#include                 //stdio.h
#include          //sys/types.h
#include               //stdint.h
#include     // stdlib.h

typedef struct {
uint8_t subevent;
uint8_t data[0];
} __attribute__ ((packed)) test_event;

int main(int argc, char** argv)
{
int ext_size = 12;
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

ros

xtion

分类: 机器人-ROS
作者: Sam (甄峰)  sam_code@hotmail.com

ASUS Xtion是华硕使用PrimeSense技术发布的RGBD 3D设备。在机器人导航设备中,除了激光雷达,也可以使用3D摄像头来做环境采集设备。现把实际使用过程和遇到的一些问题记录如下。

问题1. Xtion插入USB口后,未能正常驱动起来。
#lsusb
可以看到设备:1D27:0600  ASUS
#dmesg
Not enough bandwidth for new device state.
怀疑有二。 
A: 记得Linux Kernel在32bit 系统中,确实有个Bug。对多个摄像头插入同一个Hub时,确实会导致带宽不足。
B: XHCI和EHCI的问题。设备也许不支持XHCI。
要解决A,需要重新安装系统到64Bit。工程巨大。所以先测试下B。
进入BISO. xHCI模式关闭掉。 XHCI Hand-off, EHCI  Hand-off 都关闭。重新启动系统。果然能解决问题。看来猜测B是正确的。


软件和驱动安装过程
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2017-03-03 15:25)
分类: 机器人-ROS
作者:Sam (甄峰)  sam_code@hotmail.com

1. 得到某个ROS Package的软件包名:
Sam在使用ROS时,常有这样一个问题:
如我知道某个ROS Package的名字,以及它的Source地点。如果要拿它的Source Code。可以通过git clone ...
得到它。但如果我只想使用 apt-get install 来安装它。 则常常不知道这个软件包的名字。通常的方法就是bing查。但效率较低。直到某一天发现这个方法。
使用新立得软件管理器
在Ubuntu软件中心,输入:synaptic。安装之。

打开新立得软件包管理器。输入想要安装包的一部分,则软件包的全称就出现了。
例如:
1.想安装ROS Package-----openni-camera. 只需要输入之:就可以看到软件包
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

actionlib

ros

分类: 机器人-ROS
作者: Sam (甄峰)  sam_code@hotmail.com

Sam在ROS学习中,遇到知识点actionLib, 觉得特别有用。学习记录之。

0. 基础知识:
actionlib是ROS一个功能包集(actionlib stack).
http://www.ros.org/browse/details.php?distro=kinetic&name=actionlib
http://wiki.ros.org/actionlib

在ROS系统中,向某个Node发送请求,并获取响应。可以通过ROS Srevice机制来满足。但如果执行某个请求的时间很长,(如要求机器人从A点移动到B点)在此期间,用户想要查看执行的进度或者干脆取消这个请求。Service机制就没法满足了,但是actionlib可以满足用户这种需求。
ActionLib栈提供工具,使用户可以创建一些Servers,这些Server用来执行较长时间的任务,并且任务可以被制止。同时ActionLib还提供了一些Client接口,用来给Server发
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有