自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (3)
  • 收藏
  • 关注

原创 C语言隐式声明导致的死机问题

概述:在一次开发工作中,同样代码同样的一个配置操作在32位平台正常运行,64位平台上会立马死机。编译也没有报任何错误和警告,查看代码也没有任何可疑之处,实在有些莫名。经过打印定位到死机位置是使用一个指针函数A返回的地址进行memcpy操作会立马死机,打印出指针地址,发现函数A内打印指针地址正常,而外部调用这个函数接收到的返回值指针地址高32位被截断了,所以使用该指针就会立马死机。意外的解决: 在本项目中有一个同样类似的指针函数B,这个操作可以正常使用,对比发现,A函...

2022-02-17 14:47:59 1110

原创 __thread关键字获取线程id和线程名-减少资源占用

概述: 当我们使用系统调用函数获取线程名字或者线程id,其实这是非常耗系统资源的,当我们频繁获取会占用很多时间。使用__thread关键字就可以完美解决这个问题,只需第一次获取一次即可,极大的减少资源。同时这个功能在我们一个函数被多个线程调用,调试的时候加上线程id和名字,就可以很清楚打印是谁调用的,而且不耗资源,很便于调试。__thread关键字我就稍微说下吧,这个网上很多,__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份...

2020-10-15 20:07:08 1168

原创 编译阶段检测结构体大小是否正常

概述: 在工作中,设备的配置文件是一个大的结构体保存到flash中,这个结构体各个已用的参数偏移是不能改动的(参数很多很复杂),如果改动就会影响后面的设备,导致一系列问题,故参考了网上的资料,写了一个简单例子,用于学习。保证了我们保存flash的结构体不会被不经意改变,导致出问题。实例demo:#include <stdio.h>#include <stddef.h>/* 编译阶段检测结构体的大小是否等于特定值 */#define SI...

2020-08-06 17:08:38 1164 1

原创 iptables实现IP黑白名单功能

概述: 在我们嵌入式设备,可能有时候为了安全会有黑白名单功能,黑名单模式:在黑名单的IP就不能访问我们的设备,白名单模式:只有白名单的IP可以访问我们的设备,其他IP均不能访问我们设备。这里我们就是用iptables完成想要的功能。一,了解iptables基本操作 已经有很多博客解释了这个iptables怎么使用了,我就不多写了,附上参考链接: ...

2020-04-26 19:14:23 6963 4

原创 Linux的进程线程调度策略

概述: 最近接触到关于linux调度的一些相关内容,这里做个总结笔记。这里主要学习到三种调度策略,SCHED_RR,SCHED_FIFO,SCHED_OTHER这三种。具体详细的内容就不多说,已经有很多详细的介绍了。这里记录下怎么查看某个进程或线程的调度策略和优先级,以及怎么修改别的进程或线程的优先级。快速查看进程优先级和调度策略: 找到某个进程或线程...

2020-03-13 10:58:21 1521 1

原创 解决程序越界或栈溢出导致的死机或不正常问题排查的一个方法

概述: 在程序开发中,我们可能会遇到一些莫名的死机或者程序错误的执行。如果是死机我们可以看coredump,但是有时候coredump可能是死在C库,我们看不出来啥。这时我们可以加打印,打印出相关变量,用于确定问题所在。这里记录自己一个简单的问题解决的方法。解决思路: 1,程序在经过一个操作触发后,程序会出现发送的数据发不出或者有时候还会导致死机,看coredum...

2019-12-24 14:22:54 1847

原创 解决结构体不对齐,找到对应字段的一个简单方法

概述: 在工作中,我们可能会遇到对接平台是二进制的一个协议,如果我们换了平台或者换了修改地址,可能就会某些偏移不对,导致协议不对或者保存的数据出问题,这里简单介绍一个C语言函数,打印出每个变量相对于结构体开始的偏移地址。这样可以快速找到定位问题,如果自己去计算,在结构题很复杂的情况下很可能会出问题,也太麻烦。废话不多说,直接上demo:#include <std...

2019-12-18 19:36:02 821

原创 linux下C程序控制coredump文件生成开启与关闭Demo

概述: 本文主要是控制coredump文件生成的开关设置,在开发工作中coredump可以很好的帮助我们去发现死机等等程序问题,便于查找问题所在,所以这里如何控制coredump文件生成和简单实用coredump做一个简单的记录。Demo中一些详细的解释可以看后面的参考资料的链接,这里就不赘述了。Demo:#include <stdio.h>#include &l...

2019-09-05 14:58:14 1256 1

原创 python实现ssh连接执行指令的两种方式Demo

python版本:python3.7.4Demo:#!/usr/bin/env python# -*- coding: utf-8 -*-#################################################author: SkyJ#date : 2019/7/17##########################################...

2019-07-18 09:44:27 3686

原创 SourceInsight快速看代码的小技巧

概述: 嵌入式开发过程,简单易用的代码查看编辑器应该要数SourceInsight使用率最高了吧,这次主要是说说在阅读代码过程中,使用SourceInsight的几个功能,让阅读代码更快捷。(最基础的怎么建项目等等就不说了,省略)小技巧: 1,导入项目中的所有文件,点击Project->Synchronize Files同步项目所有文件(软件会建立索引,...

2019-04-26 15:38:48 3353

原创 嵌入式软件面试准备与知识点总结

基本准备步骤: 1,花时间将自己做过的项目整理一遍,基本的架构用图画出来,用到的知识,自己遇到的问题,怎么解决的自己梳理一遍,还有自己觉得自己做的比较好的部分也可以在简历上重点突出。一定要熟悉自己做的项目,不然到时候说的时候就懵逼。 2,整理面试过程中我们可能遇到的知识点,嵌入式主要面试就是C语言啦,相关知识可以梳理一下,看一看嵌入式的经典面试题,基本知识点都涵盖了。 ...

2019-03-20 12:40:57 6272 5

原创 嵌入式软件面试经历分享(海康威视&涂鸦智能)

本人一个垃圾大学学渣,毕业就一直干着嵌入式软件开发,这次换工作也是深思熟虑后的一个选择。面试了两家公司都拿到了Offer,还是极大增强了我的信心。同时,在面临抉择的时候也是一个艰难的过程。海康威视面试: 其实我自己认为我们这种不好的大学毕业,这样的企业应该是不会考虑我们的,当时想去面试就当是一次经历吧,大公司是怎样的也该去看看,就当开开眼界。想到这次面试是一个机会,自己...

2019-03-19 19:21:54 16937 3

原创 cJSON的使用实例Demo(平时使用这篇内容完全足够了)

概述:     在嵌入式开发过程中,我们在与服务器通信过程可能会使用json包形式传输数据,那cJSON这个轻量库就要登场了。由于cJSON库只需使用cJSON.c和cJSON.h这两个文件,我们一般就直接拿过来用啦。通过这个库我们可以轻松的实现json数据包的封包解包。这里是我整理的一个demo,基本注释都在代码注释,还有注意事项,平时使用到的基本全部都用到了,所以看这个实例找到你需要的部分...

2018-12-25 14:39:57 4917

原创 libev+TCP服务器事件轮询实例demo

概述:     使用libev实现TCP服务器,提升处理效率。原理其实都一样,都是文件描述符,检查读写条件,使用epoll事件轮询机制。实例Demo:#include &lt;stdio.h&gt;#include &lt;netinet/in.h&gt;#include &lt;arpa/inet.h&gt;#include &lt;stdlib.h&gt;#include...

2018-12-21 11:19:09 889

原创 libev+uart实现串口事件轮询实例demo

概述:      在linux编程中我们经常会听到“一切皆文件”这句话,其实串口编程也只是拿到一个文件描述符,有数据发送过来我们就可以读到数据,利用libev的io操作,我们就可以实现epoll事件轮询,有数据就会产生回调不需要傻傻在那里sleep轮询检测。对于使用虚拟机和windows串口通信可以看我之前写的这篇文章。实例Demo:#include &lt;stdio.h&gt;...

2018-12-21 11:04:44 2013

原创 libev+nanomsg实现多线程通信及事件轮询实例demo

概述:       在我们刚接触程序编码的时候,我们要轮询数据有没有发过来,我们最多的可能还是使用while+sleep这样的组合,这对于处理来说是一个效率很低的方法同时还消耗cpu,那么在多线程编程中使用libev+nanomsg会不会提高效率呢。下面实例主要工作如下:A B C 三个线程通过nanomsg通信,A线程作为主线程,控制中枢,B C请求均通过A.那么在实际应用中,比如B模块是接...

2018-12-21 10:34:03 3143 1

原创 libev库的安装及简单测试实例

概述:      在工作及学习的过程中,发现libev对于嵌入式开发来说是一个相对轻量而又好用的事件控制库。那么在我们平时的工作中就可以直接使用libev库实现事件轮询控制,对于效率上也会提高很多,先看看怎么下载安装libev库吧。下载:       下载地址,进入页面后点击libev-4.24.tar.gz下载压缩包,使用tar -zxvf libev-4.24.tar.gz命令解压...

2018-12-21 10:13:50 1961

原创 使用nanomsg库实现多线程之间的通信(三)

概述:   这次使用nanomsg库实现多线程一对多的双向通信,其实类似一个服务器,其他均为客户端,且它们之间是长连接,所以服务器可以主动和客户端通信,客户端也可以和服务器通信,这样的一个方式。多线程一对多双向通信Demo#include &lt;stdio.h&gt;#include &lt;pthread.h&gt;#include &lt;stdlib.h&gt;#inc...

2018-10-30 11:42:31 2690

原创 使用nanomsg库实现多线程之间的通信(二)

概述:      这次是nanomsg库实现的一个类似于MQTT通信的一种方式,广播订阅的一个一对多的通信方式。一个主的广播消息,其他可以订阅自己想要的主题信息,然后就会只接收订阅的主题的信息。PubSub一对多主题订阅通信Demo#include &lt;stdio.h&gt;#include &lt;pthread.h&gt;#include &lt;stdlib.h&gt;...

2018-10-30 11:31:53 2471

原创 使用nanomsg库实现多线程之间的通信(一)

概述:      这次主要是使用nanomsg库实现多线程之间的通信,在我们复杂的多线程编程中可能各个线程需要共用一些信息,平常加互斥锁等等,有时候也是相当麻烦,这里是使用nanomsg库实现多线程的通信,主要这次是一对一线程双向通信和单向通信的demo。 多线程一对一双向通信demo#include &lt;stdio.h&gt;#include &lt;pthread.h&...

2018-10-30 11:13:35 4366

原创 解决STM8类型单片机空间太小,使用不了printf串口打印问题

概述:     在使用STM8L101F3这款单片机时,由于它只有8K的flash,空间非常小,只要调用C库函数printf编译后整个文件很大,直接程序溢出。这也就意味着我们实现printf串口打印调试就没办法进行。既然使用不了库函数,那么我们就可以自己动手封装类似printf的函数,这样我们就可以实现数据串口打印啦。这里就直接放上我的STM8L101F3的部分源码了,希望可以给你一些参考。...

2018-09-01 10:45:52 4617 4

原创 整型数转二进制,八进制,十进制,十六进制字符串及浮点数转字符串Demo

概述:    这次主要是一个整数int转为各种进制字符串以及浮点数double转为字符串的操作。当然,前提条件是不可使用库函数sprintf,由于嵌入式开发环境,调用库后可能编译后的可执行文件过大,这里就是自己封装的一个简单转换的函数。留作笔记,以后也可直接使用,不用再找,麻烦。Demo:    废话不多说,直接上源码,不过对于浮点数转换那里,由于精度问题,如果输入的浮点数精度超过我们...

2018-09-01 10:23:55 1886

原创 STM8使用SPI通信需要注意的几个问题

概述:     在使用STM8L101F3单片机,SPI通信读取三轴传感器ADXL362数据时,出现了一系列的问题,在这里做个笔记,也希望可以给大家一个小的参考。问题一:      在SPI初始化过程中,没有初始化MISO,MOSI,SCLK三个引脚,导致在通信过程中写数据读数据出现问题。所以在这里贴出测试后可以正常运行的SPI初始化代码。(STM8L101F3,使用官方标准库)...

2018-08-28 16:07:10 5268 1

原创 将Git Bash界面打造成Linux界面的方法及一些小技巧

By Sky.J 2018.08.13概述:           平时都是使用linux开发,上传文件到github,但是这次项目属于二次开发是需要在windows上编译开发。那么没办法,下载安装了Git工具,可以在windows上运行。下载好打开git bash界面发现,真的难受。用习惯了linux,看着那个$符另起一行,就是别扭,可能是强迫症,哈哈。所以就去找方法,看能不能修改。当然,...

2018-08-13 17:22:12 9226 1

原创 使用nanomsg库实现多进程之间通信

概述:       之前下载并安装了nanomsg库,接下来就是看看怎么使用啦。首先是看看如何实现进程间的通信吧。实例demo:#include &lt;stdio.h&gt;#include &lt;pthread.h&gt;#include &lt;stdlib.h&gt;#include &lt;string.h&gt;#include &lt;unistd.h&gt;...

2018-08-11 13:47:23 8165

原创 Linux Ubuntu 下安装 nanomsg库

By Sky.J 2018.08.11概述:        主要记录一下nanomsg库在ubuntu14.04下的安装。nanomsg库可用于多线程,多进程等通信。这在我们多线程多进程编程中会给与极大的方便。所以学习一下nanomsg,那么第一步就是下载安装了。下载库包:           打开下载页面,选择如下图的软件包下载。  解压编译安装://移动到...

2018-08-11 12:01:40 2988

原创 一个实用的可适用于多线程,单进程的循环队列

概述:       这次主要是在我们嵌入式软件编程中,存储容量有限,不能无限存储过多数据,但此时又有大量数据产生。我们一般就会使用循环队列进行数据的存储,可以保证最新的数据不会丢失,只是会覆盖老数据。这里是一个多线程的循环队列的demo,当然单进程肯定也是可以使用的,只需把其中多线程的部分去掉即可。源码:#include &lt;stdio.h&gt;#include &lt;st...

2018-08-08 15:02:54 1162

原创 基于三轴加速度传感器的计步算法

基于三轴加速度传感器计步算法By Sky.J 2018.08.08概述今天主要是想要分享利用三轴加速度传感器计步的一个算法步骤。 数据分析---&gt;模型这里拿到的是ADI公司的测试数据,可以看到不管如何佩戴计步器,总有至少一个轴具有相对较大的周期性加速度变化。那么我们就可以从这里着手,进行数据分析,判断步伐。算法1,均值滤波器---滤波均值滤波器实现均值...

2018-08-08 11:23:00 42135 27

原创 STM32闹钟的一个进阶使用

STM32闹钟的一个进阶使用By Sky.J 2018.06.23概述: 在使用STM32的过程中,我们在项目中可能经常会用到它的闹钟功能,但是对于刚开始接触STM32闹钟时,我就是直接设置一个闹钟,然后等待中断,有时候如果有两个闹钟,我们可以用ALARM A和B,但是有4个5个或者更多的闹钟设置,这时就不知道怎么办了。我就根据我的使用需求想了一个办法(只涉及几点几分,不考虑年月日及周几),...

2018-06-23 10:06:07 5058 4

原创 关于STM32时钟源及配置等相关知识笔记

关于STM32时钟源及配置等相关知识笔记By Sky.J 2018.06.021,时钟源​ HSI HSE LSI LSE PLL MSI (L系列特有)2,主要的几个时钟​ SYSCLK ---&gt;系统时钟 PLLCLK ---&gt;锁相环时钟 HCLK ---&gt;AHB总线时钟 PCLK1 ---&gt;APB1总线时钟 PCLK2 ---&...

2018-06-02 10:03:30 1344

原创 关于STM32串口printf输出调试信息问题

概述:目前使用openwrt系统的路由方案,现在实现路由器下设备可以挂载路由器的nfs共享目录,并且实现在同一个交换机下的设备和路由器,设备可以挂载路由器的nfs共享目录(跨网段挂载)。

2018-06-02 09:58:57 3810 2

原创 官方STM32的NUCLEO开发板使用

官方STM32的NUCLEO开发板使用概述:因工作需求,先买了stm32的NUCLEO开发板做测试板,本人使用的是L073RZ这块板子,也是第一次接触stm32,摸索状态。这里记录一下使用过程,做笔记的同时希望也可以对别人有点帮助。1,准备​ 既然要使用这块板子,那么对这块板子我们肯定是需要基本了解一下的,怎么测试,如何测试,供电问题,调试问题我们都需要看看官方文档。​ 这里贴一个NUCLE

2018-02-02 13:46:25 26913 7

原创 sqlite3数据库C语言简单操作基础之数据的查找(三)

sqlite3数据库C语言简单操作基础之数据的查找(三)概述:sqlite3数据库的创建,增删改都说过了,今天就是数据库的查找,也算是数据库比较核心的应用。如果用之前的API执行,因查找数据库有返回值,也就导致使用sqlite_exec()函数时要写回调函数,我觉得这样子效率不高,编写麻烦,我这边就用几个新的API去做。这几个新的API其实就是sqlite_exec()函数的分解版。1,分解版API

2018-01-31 13:57:25 1993

原创 两种通用加密算法(MD5,RSA)使用

两种通用加密算法(MD5,RSA)使用概述 md5及RSA加密算法是我们比较常见的两种加密算法,也是经常使用到的。我主要是利用md5的C Lib库实现md5加密功能,使用openssl库API实现RSA加密。这里做个笔记,下次用到就可以直接使用了。MD5 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16

2018-01-19 14:14:26 4093

原创 sqlite3数据库C语言简单操作基础之数据的增删改(二)

概述:前面记录了sqlite3数据库c接口的一些基础API的功能介绍以及数据库文件创建及表的创建,今天主要就是记录一下数据库数据的增删改,为啥这里没说查,后面会单独做一个查的笔记。毕竟查可能就有点不一样了,它是有返回值的,所以就分类到下次记录吧。1,插入数据 主要还是看sql语句语法,插入数据用到的关键字就是INSERT,它的语法知识可以简单的概括为两种。INSERT INTO 表名称 V

2018-01-12 10:52:04 1793 2

原创 sqlite3数据库c语言简单操作基础(一)

概述:sqlite3数据库是一个比较精简的数据库操作库,在嵌入式设备上,因其轻量级,大多使用的就是这货了。当然它的使用也是比较简单的,通过几个基础的API就可以完成一些基本的操作了。最近使用这货,所以做一下学习笔记,省得以后用到又的查资料麻烦。这篇笔记就主要是数据库的创建还有基础的几个API介绍。后面的话会具体记录一下数据库的增删改查,以及事务部分。使用测试环境: 系统linux:u

2018-01-11 15:00:37 2348

原创 关于libjpeg或libjpeg-turbo使用中的一个注意事项

概述:在使用libjpeg在我的项目中,在测试过程中压缩图像出错,然后程序直接退出了,这对于我们程序来说那肯定是不行的啊。所以就开始找问题啦,在网上找到原因,原来是我们在压缩过程中使用了libjpeg默认的出错处理函数error_exit(),所以导致出错以后程序就整个退出了。今天我主要就是把这个分析的过程记录下来。我们先看一个例子,我们使用默认的错误处理函数进行图片解压缩。代码如下:#includ

2017-12-23 14:47:31 2962

原创 Webbench源码分析之多进程(三)

概述:前面我们把参数输入,http协议以及socket客户端编程部分都说了,今天就把多进程这一块内容学习过程记录一下。同时今天学习的这一部分也是webbench的核心部分了。知识点: 1,多进程的创建。 2,多进程无名管道pipe通信。 3,多进程信号。还是老样子,在学习源码之前先把用到的知识点搞懂,然后再进行学习,这样就事半功倍了。1,多进程的创建 说到多进

2017-12-21 18:02:13 590

原创 Webbench源码分析之socket及http协议(二)

概述:通过阅读webbench源码,我个人总结了大致以下六个知识点。我第一个参数输入我在上篇博客中说过了,今天主要是http协议和socket客户端编程的一个学习记录,后面的4,5,6知识点都属于多进程的一个学习,我下篇再一起说了。知识点: 1,参数输入函数getopt_long()函数使用。 2,http协议。 3,socket客户端网络编程知识。 4,多进

2017-12-20 14:11:20 533

原创 Webbench源码分析之参数输入getopt_long(一)

概述:最近想看一些优秀的开源项目,然后知乎上找到一个列表,说可以看看webbench源码,总共代码也就500多行。所以就开始看开源代码webbench,这也算是笔记吧。今天主要看了参数输入部分,所以就详细了解了getopt_long函数的使用方法。webbench.c的源码/** (C) Radim Kolar 1997-2004* This is free software, see GNU

2017-12-15 19:03:54 622

嵌入式面试知识点总结

主要是自己嵌入式面试整理的一份知识点总结文档。

2019-03-20

cJSON使用实例Demo包

cJSON的完整使用实例demo,解压即可编译使用,运行环境linux.

2018-12-25

sqlite3使用实例代码

主要是个人写的一个sqlite3 c接口的数据库操作demo,基本满足平时的使用要求。

2018-01-11

空空如也

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

TA关注的人

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