peijian1998的专栏

私信 关注
红尘-有梦
码龄10年

做一个简单的人,平和而执着,谦虚而无畏。

  • 221,384
    被访问量
  • 87
    原创文章
  • 40,239
    作者排名
  • 41
    粉丝数量
  • 于 2010-10-08 加入CSDN
获得成就
  • 获得29次点赞
  • 内容获得6次评论
  • 获得192次收藏
荣誉勋章
兴趣领域
  • #人工智能
    #图像处理#算法#深度学习#视觉/OpenCV#语音识别#机器学习
  • #算法
    #TensorFlow
TA的专栏
  • ROS
    14篇
  • Linux
    1篇
  • 51单片机
    1篇
  • 音视频
  • FreeRTOS
    1篇
  • ITE
    3篇
  • 树莓派
    1篇
  • ARM
    16篇
  • 英语
    5篇
  • C语言
    17篇
  • 工作与生活
    11篇
  • 计算机网络
    8篇
  • 编译跟调试
    26篇
  • Linux内核
    39篇
  • linux 用户层
    1篇
  • linux内核设计与实现笔记
    5篇
  • 计算机网络-自顶向下方法与Internet特色笔记
    5篇
  • 项目管理
    1篇
  • socket通信
    1篇
  • ubuntu
    3篇
  • 问题总结
    1篇
  • 802.11
  • 操作系统
    2篇
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

ROS kinetic+MoveIt!控制aubo机械臂笔记一

ubuntu:16.04.7vmware:15.5ros:kinetic 参考前面的笔记,首先安装ros kinetic + moveit!.控制aubo机械臂,最好是不要用虚拟机,因为pc跟aubo机械臂需要通过TCP进行通信,虚拟机可能不太稳定,pc上直接安装个ubuntu系统会比较好些。这里只是做个笔记,实际产品中不要使用虚拟机。 这里使用的是ubuntu16.04+ros kinetic,其实也可以使用ubuntu18.04+ros melodic,因为接口都是一样的...
原创
53阅读
0评论
0点赞
发布博客于 9 天前

aubo机器人报错

从gitee上下载aubo机器人的源码,按照readme编译成功后,运行如下命令时报错:报错内容如下: 原因是运行aubo机器人时找不到文件libmoveit_robot_trajectory.so.0.9.15.执行命令:find / -namelibmoveit_robot_trajectory.so* 发现在/opt/ros/kinetic/lib目录下文件libmoveit_robot_trajectory.so.0.9.18,版本号为18,而这里需要...
原创
10阅读
0评论
0点赞
发布博客于 14 天前

C++静态库与动态库

转载:https://www.cnblogs.com/skynet/p/3372855.htmlC++静态库与动态库 2013-10-16 20:18 吴秦 阅读(147389) 评论(47) 编辑 收藏C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写...
转载
30阅读
1评论
0点赞
发布博客于 16 天前

机器人开发实践源码编译报错问题解决方法

ubuntu:16.04.7ros:kineticvmware: vmware15.5移植《机器人开发实践》源码包 ros_exploring,出现的问题都包含于以下内容中。书中提到,如果将源码包 ros_exploring 直接放到 catkin 工作空间中,需要将 ros2 文件夹移出到工作空间之外,否则编译失败。 将 ros2 文件夹移出之后仍然报错,具体信息如下: Could not find the required component ‘ecto’. T...
转载
19阅读
0评论
0点赞
发布博客于 17 天前

ROS launch文件解析

转载:https://www.jianshu.com/p/e55850b87c7d?from=singlemessage
转载
6阅读
0评论
0点赞
发布博客于 28 天前

MoveIt! RViz Visual Tools设置

在看wiki MoveIt!教程的MoveIt! Quickstart in RViz 章节时,教程里面设置RViz Visual Tools的“MotionPlanning - Slider”和RvizVisualToolsGui。这两个功能通过右键"Displays"来添加。如下图所示:
原创
29阅读
0评论
0点赞
发布博客于 1 月前

《ROS机器人开发实践(胡春旭)》第十章MoveIt!机械臂控制 学习笔记三

按照古月老师给的例子,使用随机轨迹的代码时出现以下问题:test_random.cpp:#include <moveit/move_group_interface/move_group_interface.h>int main(int argc, char **argv){ ros::init(argc,argv,"move_group_interface_demo",ros::init_options::AnonymousName)...
原创
14阅读
0评论
0点赞
发布博客于 1 月前

《ROS机器人开发实践(胡春旭)》第十章MoveIt!机械臂控制 学习笔记二

按照之前的步骤,使用moveit setup assistant设置好配置文件后,继续往后学习,使用C++程序控制rviz中的机械臂。写完代码运行时,出现如下警告: 其中有个警告“The root link base_link has an inertia speciaied in the URDF,but KDL does not support a root link with an inertia.As a workaround, you can add an extra...
原创
21阅读
0评论
0点赞
发布博客于 1 月前

《ROS机器人开发实践(胡春旭)》第十章MoveIt!机械臂控制 学习笔记

在学习《ROS机器人开发实践(胡春旭)》第n10z章的MoveIt!时,因为在自己创建的工作空间中没有下载作者的源代码,所有有以下几个问题:1、使用moveit setup assistant时,需要一个机器人URDF的模型文件,这里找到胡春旭在github上的源代码https://github.com/peijian1998/ros_exploring/tree/master/robot_marm/marm_description/urdf/ram.xacro,打开ram.xacr...
原创
28阅读
0评论
0点赞
发布博客于 1 月前

向github账号和gitee账号添加ssh key

vmware:15.5ubuntu:16.04.71、git --version 查看git是否已经下载。如果已经下载,则会提示git的版本号,如果未下载,则执行命令 sudo apt-get install git 进行下载,下载完成后执行 git --version查看版本号。2、初次运行git前的配置,主要是配置用户名和邮箱。 git config --global user.name "jupj" git config --global user.email "xx...
原创
22阅读
0评论
0点赞
发布博客于 2 月前

kinetick gazebo连不上服务器

环境:vmware:15.5ubuntu 16.04.7ROS: kinetic问题: 执行命令 roslaunch gazebo_ros empty_world.launch 运行gazebo最新环境时,gazebo起来了,但是gazebo显示黑屏,查看终端的,显示如下:解决: 执行命令:(export ROS_HOSTNAME=localhost //该命令可能需要可能不需要)(export ROS_MASTER_URI=http://...
原创
10阅读
0评论
0点赞
发布博客于 2 月前

ubuntu16.04.7安装ros kenitic

最近在学习ros,本来已经安装好了ros melodic+ubuntu18.04,但是很多ros的学习资料都是基于kinetic的,所以又重新安装了kinetic。安装过程参考wiki http://wiki.ros.org/kinetic/Installation/Ubuntuubuntu:16.04.7步骤:1.查看ubuntu 软件中心设置 sudo update-manager -c -d2、设置source.list sudo sh -c ...
原创
35阅读
0评论
0点赞
发布博客于 2 月前

ROS Melodic 自定义message

如果在ROS的标准中已存在消息类型,则应该使用该消息。然而有时候需要定义自己的消息。定义一个自己的消息类型,步骤如下:1、首先创建一个package,package名字为example_ros_msg。 cd ~/ros_ws/src catkin_create_pkg example_ros_msg std_msgs roscpp cd ~/ros_ws catkin_make echo "source ~/ros_ws/devel/se...
原创
23阅读
0评论
0点赞
发布博客于 2 月前

ROS Melodic 创建package

前提:已经创建好工作空间工作空间目录:~/ros_ws/src具体步骤:1、cd ~/ros_ws/src2、catkin_create_pkg my_minimal_nodes std_msgs roscpp3、cd ~/ros_ws4、catkin_make5、echo "source ~/ros_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc工作空间已经创建好。ls ~/ros_ws/s...
原创
14阅读
0评论
0点赞
发布博客于 2 月前

ROS melodic安装注意事项

ROS版本:melodicubuntu版本:18.04.5 LTS (cat /etc/issue可查看ubuntu版本号)安装时参考官方安装指导: http://wiki.ros.org/melodic/Installation/Ubuntu注意事项: 一、安装时第一步要求查看ubuntu软件中心的设置,但是在ubunut 18.04版本中,桌面上找不到软件中心的图标(不能直接打开软件中心)。可通过以下命令打开软件中心:sudo update-manager -c -d...
原创
21阅读
0评论
0点赞
发布博客于 2 月前

为什么差分信号抗干扰能力强

差分信号又称差模信号,与传统使用单根信号线电压表示逻辑的方式有区别,使用差分信号传输时,需要两根信号线,这两个信号线的振幅相等,相位相反,通过两根信号线的电压差值来表示逻辑0和逻辑1。 相对于单信号线传输的方式,使用差分信号传输具有如下优点:1)抗干扰能力强,当外界存在噪声干扰时,几乎会同时耦合到两条信号线上,而接收端只关心两个信号的差值,所以外界的共模噪声可以被完全抵消。2)能有效抑制它对外部的电磁干扰,同样的道理,由于两根信号的极性相反,他们对外辐射的电磁场可以相互抵...
原创
145阅读
0评论
0点赞
发布博客于 2 月前

中颖SH771651/1652笔记之TIM3

void PERI_Timer3Start(void){ /* Timer3选择外部晶振32.768KHz为时钟源,1分频*/ T3CON = 0x02; /*设置62.5ms溢出(0xFFFF - 0xF800 +1)*1000 / 32768 = 62.5ms */ TL3 = 0x00; TH3 = 0xF8; //开启Timer3 T3CON |= 0x04;}...
原创
18阅读
0评论
0点赞
发布博客于 3 月前

2020-11-16

Git教程https://www.liaoxuefeng.com/wiki/896043488029600
转载
13阅读
0评论
0点赞
发布博客于 3 月前

普通麦克风和多阵列麦克风的区别

普通麦克风是指单个的麦克风。或者说多个麦克风但是这些麦克风之间没有加入处理电路或芯片,那么这些也是普通麦克风。 麦克风阵列是多个麦克风按一定方式排列在一起,由于加入芯片,像昆虫的复眼一个能够精确定位,可以通过芯片,消除环境中各种干扰,比如回声,这就大提高了在恶劣环境中的音色识别性能,也可以降低噪音,主要用在人工智能上,实现远距离识别有用信号,也就是提高清晰度。现版在在远程会议,刑侦,庭审,录音笔上都有这种麦克风阵列。当前成熟的麦克风阵列的主要包括:讯飞的2麦方案、...
原创
540阅读
0评论
0点赞
发布博客于 4 月前

FreeRTOS任务优先级设计原则

1、IRQ任务:是指通过中断服务程序进行触发的任务。此类任务应该设置为所有任务里面优先级最高的。2、高优先级后台任务:比如按键检测、触摸检测、USB消息处理、串口消息处理等可以归于这一类。3、低优先级时间片调度任务:比如emwin界面显示、LED数码管显示等不需要实时执行的都可以归为这一类。 这类任务不需要高实时性。4、空闲任务。特别注意: 1、IRQ任务和高优先级任务必须设置为阻塞式(调用消息等待或延时等函数)。只有这样,高优先级任务才会释放CPU的使用权,...
原创
231阅读
0评论
0点赞
发布博客于 6 月前

IT976E读写RTC芯片PT7C4302

/*RTC芯片为PT7C4302*//*PT7C4302芯片的读写时序与RTC芯片DS1320基本一致*/#define PT7C4302_SDA_GPIO_PIN 30#define PT7C4302_SCL_GPIO_PIN 31#define PT7C4302_RST_GPIO_PIN 36#define PT7C4302_SDA PT7C4302_SDA_GPIO_PIN#define PT7C4302_SCL PT7C4302...
原创
94阅读
0评论
0点赞
发布博客于 6 月前

sudo apt-get update网络认证问题和主机与虚拟机不能同时上网的问题

使用sudo apt-get update时,出现如上的问题。原因是虚拟机中的ubuntu系统没有连接上网络。因为电脑使用的是公司的网络,而公司的网络设置成在登录时需要输入用户名和密码验证。这个时候,打开ubuntu中的浏览器是不能上网的,会提示进行网络验证。验证成功后,再输入sudo apt-get update即可正常运行。...
原创
79阅读
0评论
0点赞
发布博客于 6 月前

联阳IT976E读写温度传感器CT1820

/********************温度传感器CT1820程序 Start*********************************/void CT1820_GpioInit(void){ ithGpioSetMode(CT1820_GPIO, ITH_GPIO_MODE0); ithGpioSet(CT1820_GPIO); ithDelay(10); printf("********************CT1820GpioInit
");}u...
原创
91阅读
0评论
0点赞
发布博客于 6 月前

联阳IT976E GPIO读取温度传感器CT1720

#define CT1720_GOIO 18void CT1720Init(void){ ithGpioSetMode(CT1720_GOIO, ITH_GPIO_MODE0); //设置GPIO模式 ithGpioSet(CT1720_GOIO); //GPIO置高 ithDelay(10); //延时10us printf("********************CT1720Init
");}void CT1720_Start(void){...
原创
510阅读
1评论
0点赞
发布博客于 7 月前

MD5文件校验

最近一个项目,需要做OTA远程升级,MCU从服务器下载升级文件到本地,进行程序升级。本来如果使用TPC/IP协议传输数据(升级文件)的话,可以不进行文件校验,因为TCP/IP数据传输的时候,为了保证数据的正确性,TCP/IP会进行数据校验。也就是说,我们通过TCP/IP协议接受的数据包,是不需要再次进行校验的。但是这个项目,使用了移远的串口-GPRS模块。MCU通过串口发送AT指...
原创
132阅读
0评论
0点赞
发布博客于 11 月前

如何在Keil开发环境生成bin格式文件

原文连接:https://jingyan.baidu.com/article/219f4bf7ac6d3bde442d38be.html为什么需要BIN文件呢?1、有些烧录器只支持BIN文件。2、进行OTA远程升级时,只能使用BIN文件。3、使用JLink脚本文件进行一键烧录时,只支持BIN文件。4、BIN文件要比HEX和AXF文件小的多。但Keil默认生成的...
原创
154阅读
0评论
0点赞
发布博客于 1 年前

树莓派国外源更新为国内源

树莓派默认为国外源,有时下载很慢。更换为国内源的方法如下,以阿里云为例:1、 更改/etc/apt/sources.list文件 $ sudo vim /etc/apt/sources.list 显示如下:由于版本差异,可能存在一定差别。红色的部分就是源的地址,需要修改的就是这部分,别的不用修改。用 # 号将原来的注释,免得改错了改不回来。我用的阿里...
原创
184阅读
0评论
0点赞
发布博客于 2 年前

STM32 模拟I2C 读取BH1750光照传感器数据

BH1750为光照强度传感器,可测量当前环境下光强度。VCC支持3.3V供电,通过I2C协议与STM32通信。BH1750可直接过开发板相连。以下代码,经过测量,稳定可用。i2c.c文件中的内容如下:/* 配置模拟I2C使用的GPIO*//* PC6配置为SDA,PC7配置为SCL */void I2C_GPIO_Init(void){ GPIO_InitTypeDe...
原创
1291阅读
0评论
1点赞
发布博客于 2 年前

STM32 定时器实现非中断延时

STM32使用SysTick定时器和基本定时器实现非中断延时。1. 使用SysTick定时器实现非中断延时SysTick定时器是一个24位的递减计数器。每次使用前,计数器必须先清零,然后计数器从设定的值开始递减。下面的代码经测定,非常稳定。/* 设置延时时间,延时单位为1us*/void delay_us(unsigned int delay_us){ un...
原创
230阅读
0评论
0点赞
发布博客于 2 年前

STM32F103 移植 FreeRTOS系统

1.开发板:STM32F103VET6 指南者2.开发环境:Keil53.FreeRTOS版本: FreeRTOSv10.2.1移植过程:一、使用keil5新建一个固件库工程,建好后效果如下图所示:其中,文件夹FWLIB中包含了工程所需要的固件库的.c文件。如下图所示:假设该工程位于E:\STM32\New Project目录下。二、移植FreeRTOS系统到新...
原创
333阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之定时器

STM32的定时器分为基本定时器、通用定时器和高级定时器。以STM32VET6指南者为例,TIM6、TIM7是基本定时器,TIM2、TIM3、TIM4、TIM5是通用定时器,TIM1和TIM8是高级定时器。定时器的基本功能就是计数,并在适当的时间生成一个时间/更新。 时钟源(TIMxCLK):基本定时器和通用定时器的时钟源都是经过APB1总线时钟的2倍频提供的,为72M...
原创
431阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之系统定时器SysTick

1.STM32F103的SysTick—系统定时器是属于 CM3 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSCLK,一般我们设置系统时钟 SYSCLK等于 72M。当重装载数值寄存器的值递减到 0 的时候,系统定时器就产生一次中断,以此循环往复。2.SysTick 属于内核的外设,有关的寄存器定义和库函...
原创
172阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之EEPROM AT24C02

一、硬件设计 以上是EEPROM芯片AT24C02的硬件图。SCL和SDA引脚连接到了STM32对应的引脚上,结合上拉电阻,构成了I2C通信总线。EEPROM芯片的设备地址一共由7位,其中高4位固定位1010b,低3位则由A0/A1/A2信号线的电平决定。按照此图的连接,A0/A1/A2均为0,所以EEPORM的7位设备地址是101 0000b。如下图所示,I2C通讯...
原创
1941阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之I2C协议

一、I2C物理层 I2C总线有如下特点: 1.在一个I2C总线中,可以连接多个I2C通讯设备,支持多个通讯主机及多个通讯从机。 2.一个I2C总线只使用2条总线线路,一条为双向串行数据线SDA,一条串行时钟线SCL。数据线用来传输数据,时钟线用于数据同步。 3.每个连接到总线上的设备都有一个独立的地址,通讯主机可以用这个地址进行不同设备之间的访问。...
原创
679阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之开启外设时钟

我们知道到,STM32的大多数外设,在使用前都要开启该外设的时钟。下面我们以STM32VET6指南者为例1.点亮LED灯实验时,用到了GPIOB,我们需要开启GPIOB的时钟:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO,ENABLE);//开启GPIOB的时钟N2.使用按键的时候,不论是查询方式,还是中断方式,都用到了GPIOA,所以要开启...
原创
1525阅读
0评论
2点赞
发布博客于 2 年前

STM32总结之系统时钟

1.我们都是使用 HSE,然后 HSE经过 PLL倍频之后作为系统时钟。通常的配置是:HSE=8M,PLL 的倍频因子为:9,系统时钟就设置成:SYSCLK = 8M * 9 = 72M。使用 HSE,系统时钟 SYSCLK 最高是 128M。我们使用的库函数就是这么干的, 当程序来到 main 函数之前,启动文件:statup_stm32f10x_hd.s 已经调用 SystemInit(...
原创
50阅读
0评论
0点赞
发布博客于 2 年前

STM32总结之GPIO 常用库函数

配置相关函数1.void GPIO_Init (GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)函数解释:GPIO的初始化函数,该函数的作用是对io进行初始化。参数:(1)GPIOx,GPIO的分组,如 GPIOA,GPIOB,GPIOC等的宏定义。 (2)GPIO_InitStruct,GPIO的初始化相...
原创
2032阅读
0评论
3点赞
发布博客于 2 年前

STM32总结之GPIO编程过程

用寄存器点亮LED的过程1:通过原理图找到要点亮的LED灯对应的GPIO口2.通过stm32手册找到要操作的寄存器,找到这个GPIO的基地址, 基地址+地址偏移 = 目标寄存器的地址3.编码 1.打开对应的GPIO的时钟。 2.通过操作CRL寄存器将对应的GPIO口设置为推挽输出模式,并设置一 个翻转速度 3.通过操作ODR寄存器,将电平置高或置低。...
原创
990阅读
0评论
0点赞
发布博客于 2 年前

ubuntu 18.04 LTS软件安装

1.安装vim sudo apt-get install vim2.安装gcc 1).sudo add-apt-repository ppa:unbutu-toolchain-r/test 2).sudo apt-get update 3).sudo apt-get install gcc 4).gcc -v...
原创
167阅读
0评论
0点赞
发布博客于 2 年前

C语言文件打开模式浅析

转载于https://www.cnblogs.com/kangjianwei101/p/5220021.html在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 只可以读 只可以写 读写兼备 文本模式 r w ...
转载
387阅读
0评论
4点赞
发布博客于 2 年前

c语言实现简单计算器功能

有段时间没怎么写代码了,今天用VS2010写了一个用C语言实现简单计算器功能的代码,用来找找感觉。功能本身很简单,网上例子很多,但因为是用标准终端输入和输出的,当输入错误数据时,会出现很多问题。所有添加了一个fflush函数,清除标准输入缓冲区,用来实现容错功能。标准输入缓冲区的意思是,当用户在终端输入时,当用户输入
(回车键)时,用户之前的输入被一并送到终端的标准输入缓冲区...
原创
2288阅读
0评论
0点赞
发布博客于 2 年前

win7+ubuntu18.04LTS安裝摘要

1. U盘烧录工具为UltraISO,用该工具将ubuntu的ISO文件烧录到U盘中去(网上参考资料很多)。电脑设置为U盘启动(网上参考资料很多),U盘启动后出现“Failed to load ldlinux.c32,Boot failed”,原因是使用UltraISO向U盘刻录映像时,写入方式应该选择RAW格式,不要用别的格式。2.U盘启动后,安装ubuntu系统时,有几个选项,为...
原创
206阅读
0评论
0点赞
发布博客于 2 年前

ARM Cortex-M3 存储器映射

在4GB的地址空间中,ARM Cortex-M3已经粗线条的平均分成了8快,每块512MB,每块也都规定了用途。每个快的大小都有512MB,显然这个非常大的,芯片厂商在每个块的范围内设计各具特色的外设时,并不一定都用得完,都只是用了其中的一部分而已。Cortex-M3的存储器映射如下图所示: 在这8个Block里面,由3个Block非常重要,也是我们最关心的三个块...
原创
1024阅读
0评论
0点赞
发布博客于 2 年前

STM32 通用输入输出 GPIO工作模式

GPIO工作模式 GPIO的结构决定了GPIO可以配置成8种模式: typdedf enum { GPIO_Mode_AIN = 0x0, // 模拟输入 //ADC GPIO_Mode_IN_FLOATING = 0x4, // 浮空输入 //按键检测 ...
原创
405阅读
0评论
0点赞
发布博客于 2 年前

cortex-m3 R14(LR)寄存器的作用

LR 连接寄存器:Link Register LR寄存器的作用主要由两个: 一是用来保存子程序的返回地址; 当通过BL或BLX指令调用子程序时,硬件自动将子程序返回地址保存在R14寄存器中。子程序返回时,把R14的值复制到程序计数器PC,即可实现子程序返回。 二是当异常发生时,R14中保存的值等于异常发生时程序计数器PC的值减4(因为cortex-m3采用3级指令流水...
原创
3432阅读
0评论
0点赞
发布博客于 2 年前

操作系统与进程一

1、进程需要一定的资源,包括CPU时间、内存、文件、I/O设备等,以完成其任务。这些资源可以在进程创建时分配给进程,也可以在执行进程时分配给进程。当进程终止时,操作系统将收回所以可再用的资源。2、单线程进程具有一个程序计数器来明确下一个执行的指令。     多线程进程具有多个程序计数器,每一个程序计数器指向下一个给定线程要执行的指令。3、进程由系统进程(执行系统代码)和用户进程
原创
343阅读
0评论
0点赞
发布博客于 6 年前

对称多处理器系统SMP

现在最普遍的多处理器系统是对称多处理器(SMP)系统,每个处理器都要完成操作系统中的所有任务。SMP中所有处理器地位是相同的,处理器之间没有主从关系。如果有N个CPU,那么N个进程可以同时运行,当然必须仔细控制I/O以确保数据到达合适的处理器。SMP系统允许进程和资源(包括内存)在各个处理器之间动态共享。目前几乎所有的现代操作系统,包括Windows,Linux,Mac OS等都支
原创
768阅读
0评论
0点赞
发布博客于 6 年前

qca4004模块离线不上线原因分析

今天到用户的家里进行了调试。现场发现空调内部4004模块的WiFi连接是好的。抓包看,数据也是好的。通过两个安卓手机,都可以进行控制。但是用户的一个iPad无法控制,表现为在线状态不稳定,一会在线,一会儿离线。检查发现路由器上连接的设备过多,达到了14个。重启用户的路由器也没有效果,因为重启后,路由器连接设备数迅速恢复,还是在10个以上。   将用户家里的路由器替换为我们带过去
原创
873阅读
0评论
0点赞
发布博客于 6 年前

ubuntu上安装中文输入法

1、第一步,安装语言包。选择System Settings-->Language Support-->Install/Remove Languages,将弹出以下窗口:  www.2cto.com    输入密码后,系统会安装简体中文语言包。2、第二步,安装IBus框架,在终端输入以下命令:$ sudo apt-get install ibus ibus-clutter
转载
430阅读
0评论
0点赞
发布博客于 6 年前

linux 解压/压缩 常用命令

.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzip FileName.gz解压2:gzip -d FileName.gz压缩:gzip FileName.tar.gz 和 .tgz解压:tar zxvf
转载
321阅读
0评论
0点赞
发布博客于 7 年前

SNIFF嗅探器原理

SNIFF,嗅探器,它工作在网络的底层,在
转载
996阅读
0评论
0点赞
发布博客于 7 年前

wifi无线接入过程

STA(工作站)启动初始化、
转载
5419阅读
0评论
0点赞
发布博客于 7 年前

linux socket 常用API

1、 void bzero(void *dest, size_t nbytes);
原创
421阅读
0评论
0点赞
发布博客于 7 年前

linux socket编程常用头文件

1、:IPv4、IPv6套接字地址结构
原创
390阅读
0评论
0点赞
发布博客于 7 年前

网络传输分片、MTU、MSS

分片:
原创
1245阅读
0评论
1点赞
发布博客于 7 年前

Github账号创建

Github账号创建      1、
原创
553阅读
0评论
0点赞
发布博客于 7 年前

c语言小知识

1、为什么include头文件后,就可以调用文件中
原创
326阅读
0评论
0点赞
发布博客于 7 年前

Excel使用

1.编辑下拉列表   数据->数据有效性->
原创
311阅读
0评论
0点赞
发布博客于 7 年前

好文收藏

软件工程师必学的9件事
原创
449阅读
0评论
0点赞
发布博客于 7 年前

linux内核常用头文件

1、
原创
398阅读
0评论
0点赞
发布博客于 7 年前

在电脑上构建内核源码树

编译linux内核驱动必须要有内核源码树。内核
原创
400阅读
0评论
0点赞
发布博客于 7 年前

linux编译单独一个模块makefile写法

单个文件编译一个模块:[html] view plaincopyprint?ifneq ($(KERNELRELEASE),)    obj-m := mini2440_leds.o    else  KDIR := /opt/FriendlyARM/mini2440/linux-2.6.32.2/    all:      make -C $(KDIR) M=$(
转载
1018阅读
0评论
0点赞
发布博客于 7 年前

vim+ctags+taglist+cscope

一、ctags安装与使用1、安装c
原创
493阅读
0评论
0点赞
发布博客于 7 年前

make oldconfig .config menuconfig

1、如果.config文件不存在,运行make menuconfg/config 时
转载
867阅读
0评论
0点赞
发布博客于 7 年前

linux shell脚本基础知识之六

一、shell函数本教程目前为止所有脚本都是从头到尾执行。这样做很好,但你也许已经注意到有些脚本段间互相重复。shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。shell中函数的定义格式如下:函数名(){    command1    command2    ...    commandN    [ return value ]
转载
328阅读
0评论
0点赞
发布博客于 7 年前

linux shell基础知识之五

一、for循环与其他编程语言类似,Shell支持for循环。for循环一般格式为:for 变量名 in 列表do command1 command2 ... commandNdone当变量值在列表里,for循环即执行一次所有命令,使用变量名获取列表中的当前取值。命令可为任何有效的shell命令和语句。in列表可
转载
325阅读
0评论
0点赞
发布博客于 7 年前

linux shell脚本基础知识之四

一、 if else 语句和Java、PHP等语言不一样,sh的流程控制不可为空,如:复制纯文本新窗口if (isset($_GET["q"])) { search(q);}else { //do nothing}?><?phpif (isset($_GET["q"])) { search(q);}
转载
336阅读
0评论
0点赞
发布博客于 7 年前

linux shell脚本基础知识之三

一、echo指令echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串。命令格式: 复制纯文本新窗口echo argecho arg您可以使用echo实现更复杂的输出格式控制。 显示转义字符复制纯文本新窗口echo "\"It is a test\""echo "\"It is a test\"
转载
363阅读
0评论
0点赞
发布博客于 7 年前

linux shell脚本基础知识之二

一、shell字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。单引号复制纯文本新窗口str='this is a string'str='this is a string'单引号字符串的限制: 单引号里的
转载
401阅读
0评论
0点赞
发布博客于 7 年前

linux shell脚本基础知识之一

打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了。输入一些代码:复制纯文本新窗口#!/bin/bashecho "Hello World !"#!/bin/bashecho "Hello World !"“#!” 是一个约定的
转载
375阅读
0评论
0点赞
发布博客于 7 年前

Linux下的 .o、.a、.so文件

工程里很多函数只是有声明,找不到实现的代码。因为那些实现代码已经编译成库所以看不见,我所看见的全是一堆头文件.     .o、.a、.so文件都是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。优点:程序模块化,容易重新编译,方便升级。分类:静态函数库(对应.a文件)、共享函数库(对应.so文件,类似于Windows的dll文件)、动态加载函数库(对应.o文件,
转载
361阅读
0评论
0点赞
发布博客于 7 年前

Git远程操作详解

Git是一个分布式版本控制/软件配置管理软件,原是Linux内核开发者林纳斯·托瓦兹(Linus Torvalds)为更好地管理Linux内核开发而设计。Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。Git有很多优势,其中之一就是远程操作非常简便。本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Git远程操作。git clonegit
转载
271阅读
0评论
0点赞
发布博客于 7 年前

版本控制之最佳实践(Git版)

现如今,应该每个开发者都在使用版本控制工具了吧。然而,如果你理解版本控制的基本规则,你便能更好地发挥它的效用。在此,我们汇总了一些最佳实践,希望你在使用Git做版本控制时能够了然于心、得心应手。1.  相关的改动才放一起提交一次提交(git commit)应该只包含相关的改动。比如说,修复两个不同的bug就应该分开来做两次提交。提交的改动越小(或越少),其他开发者理解起来就越容易;如果改动
转载
315阅读
0评论
0点赞
发布博客于 7 年前

Gitflow工作流程

在工作场合实施Git的时候,有很多种工作流程可供选择,此时反而会让你手足无措。本文罗列了企业团队最常用的一些Git工作流程,包括Centralized Workflow、Feature Branch Workflow、Gitflow Workflow、Forking Workflow。愿以此文抛砖引玉。在你开始阅读之前,请记住:这些流程应被视作为指导方针,而非“铁律”。我们只是想告诉你可能的做
转载
334阅读
0评论
0点赞
发布博客于 7 年前

linux内核内存管理学习之三(slab分配器)

一、内核内存分配在linux内核中伙伴系统用来管理物理内存,其分配的单位是页,但是向用户程序一样,内核也需要动态分配内存,而伙伴系统分配的粒度又太大。由于内核无法借助标准的C库,因而需要别的手段来实现内核中动态内存的分配管理,linux采用的是slab分配器。slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存。通过slab缓存,内核能够储备一些对象,供后续使用
转载
497阅读
0评论
0点赞
发布博客于 7 年前

linux内核内存管理学习之二(物理内存管理--伙伴系统)

linux使用伙伴系统来管理物理内存页。一、伙伴系统原理1. 伙伴关系定义:由一个母实体分成的两个各方面属性一致的两个子实体,这两个子实体就处于伙伴关系。在操作系统分配内存的过程中,一个内存块常常被分成两个大小相等的内存块,这两个大小相等的内存块就处于伙伴关系。它满足 3 个条件 : 两个块具有相同大小记为 2^K 它们的物理地址是连续的 从同一个大块中拆分出来2. 伙
转载
538阅读
0评论
0点赞
发布博客于 7 年前

linux内核内存管理学习之一(基本概念,分页及初始化)

[+]一概述虚拟地址空间物理地址到虚拟地址的映射内存类型二内存组织基本概念和相关数据结构阈值计算Zone等待队列表冷热页页Page页概念映射页面到zone三页表页表机制x86架构中的页地址空间分段分段机制linux中的段四内存管理初始化初始化流程初始化代码流程节点和zone的初始化特定于
转载
803阅读
0评论
0点赞
发布博客于 7 年前

kobject和kset

一、kobjectkobject是linux内核做的一个抽象,它本身不具备实际的含义。它被嵌入到各种数据结构中,因而只要我们具有kobject就可以获取并访问它所嵌入的宿主数据结构。这样就提供了良好的组织管理能力。宿主数据结构可以千变万化,但是其嵌入的kobject很简单,可以基于该结构做很多通用的事情。sysfs就是利用这一点实现的。该文件系统以很简单的方式实现了对内核中各种复杂部件(尤其是
转载
343阅读
0评论
0点赞
发布博客于 7 年前

Linux伙伴系统(一)--伙伴系统的概述 .

[+]水平有限描述不当之处还请指出转载请注明出处httpblogcsdnnetvanbreakerarticledetails7605367伙伴系统的概述什么是伙伴系统相关的数据结构水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7605367 伙伴系统的概述     
转载
440阅读
0评论
0点赞
发布博客于 7 年前

每天,每周,每月,每年程序员该做的事情

程序员每天该做的事1、总结自己一天任务的完成情况   最好的方式是写工作日志,把自己今天完成了什么事情,遇见了什么问题都记录下来,日后翻看好处多多2、考虑自己明天应该做的主要工作   把明天要做的事情列出来,并按照优先级排列,第二天应该把自己效率最高的时间分配给最重要的工作3、考虑自己一天工作中失误的地方,并想出避免下一次再犯的方法 出错不要紧,最重要的是不要重复犯相同的错误,那是愚蠢
转载
305阅读
0评论
0点赞
发布博客于 7 年前

从硬件的系统结构开始 .

我们的电脑主机上都有两个标准化的部分:北桥和南桥。它们是CPU和内存以及其他外设沟通的渠道。下图给出了CPU,内存,南北桥以及其他总线之间的关系。                     我们可以看到,所有的CPU都共用一条FSB总线(the Front Side Bus),与北桥相连。而北桥中有一个内存控制器(memory controller),它决定了RAM的类型,换句话说,不同的R
转载
429阅读
0评论
0点赞
发布博客于 7 年前

第一个Linux驱动-流水灯 .

水平有限,描述不当之处请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7711695                   本节介绍如何利用板载的Led和Linux的内核定时器实现一个简单的流水灯的驱动,所使用的开发板是TQ2440,内核版本2.6.30.4。        程序比较简单,也没涉及到什么机制,直接上代码了!
转载
489阅读
0评论
0点赞
发布博客于 7 年前

Linux Slob分配器(三)--释放对象

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705792slob释放对象由函数slob_free()来完成,分为三种情况进行处理:slob中已有的空闲单元加上释放对象块的空闲单元正好等于一个空闲的page,那么将直接将该page释放回伙伴系统slob中已无空闲单元,那么这
转载
357阅读
0评论
0点赞
发布博客于 7 年前

Linux Slob分配器(二)--分配对象

each 水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705559             上节介绍了Slob分配器的相关概念和思想,这节来看Slob分配器是如何分配对象的。kmem_cache_alloc_node()函数用来分配一个专用缓存的对象: [cpp]
转载
473阅读
0评论
1点赞
发布博客于 7 年前

Linux Slob分配器(一)--概述

水平有限,描述不当之处还请指出,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7705202     Slob分配器相较Slab和Slub分配器而言,最大的特点就是简洁,其总共的实现代码大概就600多行,因此其适用于嵌入式系统。不同于Slab和Slub,Slob分配器没有引入本地CPU高速缓存和本地节点的概念。Slob分配器同样使
转载
379阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(七)--销毁缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7703147          Slub分配器在销毁缓存时,必须得考虑缓存的引用计数是否为0,因为在Slub分配器中,缓存可以被多种对象复用,因此必须当所有种类的对象都同意销毁缓存才能执行销毁工作。[cpp] view plaincop
转载
319阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(六)--slab的分配与释放

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7702677        创建新的slab主要有两个工作,一个是从伙伴系统分配2^order个连续页框给该slab,然后就是划分slab中的对象。函数new_slab()用来创建一个新的slab.        [cpp] v
转载
451阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(五)--释放对象 .

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7701910           释放对象和分配对象是一组对称的操作,同样分为两个路径:1.如果待释放的对象所属的slab位于本地CPU缓存中,也就是slab处于冻结状态,则可直接释放2.反之,待释放的对象所属的slab位于slab链表中,
转载
359阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(四)--分配对象

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7700482          对象的分配过程体现了内存管理器对内存对象的组织方式,相较Slab分配器,Slub在组织对象的方式上给人的感觉就是简洁精悍。Slub没有用任何的管理区数组来组织这些对象,而是巧妙的将对象之间联系的桥梁嵌入在对象自身之中,因
转载
381阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(三)--创建缓存

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7700338            Slub分配器创建缓存的过程和Slab差不多,主要的区别在于Slub分配器并不是直接创建一个新的缓存,而是先试图在已有的缓存中找到一个各方面属性和待创建缓存差不多的缓存,如果能找到的话则不会去创建新缓存,而是复用
转载
516阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(二)--初始化 .

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7695264       和slab分配器一样,分配器的初始化工作主要是初始化用于kmalloc的gerneral cache,Slub分配器的gerneral cache定义如下:[cpp] view plaincopyprint
转载
416阅读
0评论
0点赞
发布博客于 7 年前

Linux Slub分配器(一)--概述

水平有限,描述不当之处还请之处,转载请注明出处http://blog.csdn.net/vanbreaker/article/details/7694648          Slab分配器一直处于内核内存管理的核心地位,尽管如此,它还是拥有自身的缺点,最明显的两点就是复杂性和过多的管理数据造成的内存上的开销。针对这些问题,linux引入了slub分配器,slub分配器保留了slab分配器的所
转载
382阅读
0评论
0点赞
发布博客于 7 年前

Linux SLUB 分配器详解

简介: 多年以来,Linux 内核使用一种称为 SLAB 的内核对象缓冲区分配器。但是,随着系统规模的不断增大,SLAB 逐渐暴露出自身的诸多不足。SLUB 是 Linux 内核 2.6.22 版本中引入的一种新型分配器,它具有设计简单、代码精简、额外内存占用率小、扩展性高,性能优秀、方便调试等特点。本文先介绍 SLAB 分配器的基本原理,然后分析其不足之处并详细介绍 SLUB 的设计思想,最后介
转载
360阅读
0评论
1点赞
发布博客于 7 年前

按键驱动程序设计笔记

buttonstructfilemodulecdelay[cpp] view plaincopyprint?/*本来友善的程序是检测上升沿和下降沿的, 当按下按键,输出  KEY? down 当弹下按键,输出  KEY? up     现在修改成只检测下降沿按下的 */        #include /*模块有关的*/   #include /*内核有关的*/
转载
388阅读
0评论
0点赞
发布博客于 7 年前

linux驱动学习之异步通知 .

异步通知是设备状态改变后主动通知应用程序,这样应用程序就不需要阻塞或查询设备了。应用通过信号来处理内核的异步通知,上次使用poll select来查询设备的可读状态,下面这个例子类似,不同的是当设备有数据时主动通知应用去读数据。    应用的C代码很简单,主要设置对信号的处理方式,内核有数据时会收到SIGIO信号,应用会自动调用signal设置的函数去读数据。 main.c#i
转载
295阅读
0评论
0点赞
发布博客于 7 年前

高效程序员-纠错前先思考

在我加入贝尔实验室一年多
转载
394阅读
0评论
0点赞
发布博客于 7 年前

高效程序员-忍耐式开发

忍耐式开发      真正的软件开发是忍耐式开发。
转载
334阅读
0评论
0点赞
发布博客于 7 年前

8 Things Programmers Can Do at Weekends

Numerous countries have adopted a two day weekend over the past several decades. Weekends are an important time to unplug from the day-to-day job and get recharged. They are also a good chance to thin
转载
524阅读
0评论
0点赞
发布博客于 7 年前

软件测试过程

软件测试测试单元测试工作产品数据库        软件测试过程的流程如下图所示:        各部分的具体解释如下:单元测试:针对每个单元的测试,以确保每个模块能正常工作为目标。 集成测试:对已测试过的模块进行组装,进行集成测试,目的在于检验与软件设计相关的程序结构问题。 确认(有效性)测试:是检验所开发的软件能否满足所有功能和性能需求的最后手段。 系
转载
430阅读
0评论
0点赞
发布博客于 7 年前

如何编写更棒的代码:11个核心要点

作为一个合格的程序员,有太多的理由促使你去编写干净利落且可读性强的代码。最重要的是因为你编写的代码,将来会有很多人一次次地阅读。当你有一天回过头来看自己的代码时,你就会明白编写优雅的代码是多么的重要。另外,如果别人来阅读你编写的代码,你是否想知道别人看到那些烂代码无比抓狂的感受。因此,花多一点的时间去编写优雅的代码,将来说不定会给你节省更多的时间。那么,如何编写更棒的代码,下面是11条基本规则
转载
328阅读
0评论
1点赞
发布博客于 7 年前