自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

学益得的博客

专注嵌入式和智能硬件

  • 博客(39)
  • 资源 (3)

原创 同样是点亮LED,选择单片机还是Linux?

经常有小伙伴问我,做某某某项目到底选择51单片机,还是上Linux操作系统。这个问题对于初学者很难抉择,需要综合考虑项目的性能、功耗、稳定性等等。选择单片机,开发简单,但是性能一般;选择Linux,开发更复杂,但是性能跟的上。下面通过三个点灯案例,跟大家分享一下单片机和Linux的区别。单片机点亮LED硬件平台: 51单片机开发板软件平台: keil、STC烧录工具技术要求: 能看懂简单的电路图;掌握C语言基本语法。难度系数: 极低单片机点灯是所有初学者都会做的一件事情,步骤极其简单:看.

2020-08-26 11:23:32 63

原创 史上最简单的图像识别-百度AI开放平台

提到图像识别,一般都会想到人工智能。虽然现在人工智能还在发展阶段,但是有些技术已经成熟,比如图像识别、语音识别。百度早在2015年之前就已经推出了AI开放平台,涵盖了语音识别、图像处理、视频技术等等。借助第三方平台,AI也可以变的很简单。一、注册百度账号百度搜索「百度AI」,第一个就是。点击右上角「控制台」。用任意一个百度账号都可以登陆。使用百度AI开放平台,需要先创建应用。选择「图像识别」,创建一个新的应用。应用名车和应用描述随便填写。完成后会得到一个API KEY和SECRET KEY,这.

2020-08-14 21:56:52 322

原创 mini2440+阿里云+Qt/android 打造智能音箱

华为在2018年10月26日发布了一款音箱,AI智能音箱,载了来自猎户星空的语音合成技术。用户通过语音或者华为智能家居App,可轻松控制音箱的播放、暂停等等操作。以华为AI智能音箱为背景,我们自己动手制作一个智能音箱,实现功能如下:音箱本身可以播放音乐,通过按键切换歌曲、暂停继续、调节音量; PC上通过Qt程序可以远程控制音箱的播放,实现和按键相同的功能; 手机端开发Android APP,功能和Qt一样; Qt和Android增加语音识别模块,能识别基本的播放指令。硬件平台m..

2020-08-07 12:16:19 89

原创 【mjpg-streamer】编写客户端程序,实现视频数据采集

mjpg-streamermjpg-streamer是一个开源的视频服务器,通过摄像头采集数据,放到内存中,再通过socket把视频数据发送出去,最终在web端显示视频数据。mjpg-streamer把采集数据、socket发送数据封装成了两个动态库,一个称作输入插件,一个称作输出插件。使用mjpg-streamer的优势如果我们想做一些跟视频传输相关的项目,完全可以利用mjpg-streamer作为视频数据来源,而不用再关心底层驱动如何实现,驱动视频数据如何读取。mjpg-streamer自带压缩算

2020-08-05 15:07:49 240

原创 【嵌入式修炼之路】-Linux基础之常用工具

学益得线上课堂从基础学习嵌入式玩转智能硬件、斩获高薪offer在正式开始嵌入式学习之前,我们有必要搞懂几个工具,比如编辑器vim、编译器gcc、调试器gdb、工程管理器Makefile,今天就来给大家介绍下vim和gcc,这两个搞不懂,代码都写不了。vim以前的版本叫做vi,两者在配置上略微有区别,操作系统默认都会安装vi,不一定安装vim,所有如果环境里面没有的可以现安装一下。一...

2020-03-30 12:08:11 1085

原创 【嵌入式修炼之路】-Linux基础之常用命令

学习Linux操作系统,第一步当然是学习命令。就好比我们拿到一台Windows电脑一样,先得学会使用鼠标,离开了鼠标,啥也干不成。Linux命令有很多,而且可以说是无穷多个,因为工具实在太多了,每天都会有新的工具出现。就像Windows一样,我们安装一个软件,都会产生一个桌面图标,双击卓妙图标就可以使用。但是Linux里面一般不会提供这种桌面快捷方式,因为很多Linux都没有桌面的,所以我们就得...

2020-03-27 14:52:49 1114

原创 【嵌入式修炼之路】-Linux基础之目录结构

学益得线上课堂从基础学习嵌入式玩转智能硬件、斩获高薪offerLinux和Windows一样,都有分区这个说法,只不过在Windows下面,我们能明确的看到不同的盘符,Linux里面虽然存在,但是看不到。根目录目录是一种很形象的树形结构,每个目录下面都有很多文件、文件夹,可以理解为树枝。如果沿着树枝一直往下寻找的话,最终会找到树根。目录也是一样,如果不停的往上翻(退出目录),最终会退...

2020-03-25 12:22:53 1251

原创 【嵌入式修炼之路】-剖析嵌入式学习路线

学益得线上课堂从基础学习嵌入式开发玩转智能硬件、斩获高薪offerLinux基础作为学习嵌入式的第一步,主要就是搭建嵌入式开发环境。安装虚拟机或者购买云服务器都可以。有了Linux操作系统,下面就是要学会使用Linux,其实就是学习一些常用命令以及如何在Linux下面写代码。推荐书籍C语言C语言是嵌入式开发必备语言,不管是Linux,还是单片机、STM32,都对C语言有极高的要...

2020-03-25 10:35:45 1475 2

原创 嵌入式的下一个发展方向,边缘计算

什么是【边缘计算】,这个概念还得从【云计算】说起。云计算云计算 (cloud computing)指的是通过网络“云”将巨大的数据计算处理程序分解成无数个小程序,然后,通过多部服务器组成的系统进行处理和分析这些小程序得到结果并返回给用户。通过这项技术,可以在很短的时间内(几秒钟)完成对数以万计的数据的处理,从而达到强大的网络服务。通俗点讲,好比一个项目,以前都是一个人在做。但是随着项目越来...

2020-03-22 19:22:16 633

原创 【排序】--C语言实现快速排序

快速排序首先简单描述一下快速排序的过程。比如有一组数据:第一步以6为基数,我们要筛选出,比6大的数字,放在6的后面,比6小的数字,放在6的前面。所以需要两个指针(下标)。从y开始,由于【2 < 6】,所以需要用2来覆盖6(不用担心6被覆盖,6已经被记下来了)。同时x++。接下来从x开始。由于【4 < 6】,就应该放在左边,所以不要移动元素4。继续x++。由于【7 &gt...

2020-03-19 15:30:45 315

原创 【Linux实用工具分享】-- crontab

分享一道网易的笔试题linux系统中有如下cron任务:20,40 */3 * * 1 sh test.sh下面描述正确的是:A 每周一每3小时,20分,40分,运行test.shB 每月1号每3小时,20分,40分,运行test.shC 每周一每3小时,每20分钟运行test.shD 每月1号每3小时,每20分钟运行test.shcron是什么有的时候我们可能需要在Linux里...

2020-03-18 11:01:52 284

原创 【排序】--C语言实现简单插入排序

简单插入排序先把第一个元素当做一个数组,因为如果数组只有一个元素的话,那么它肯定是个有序的序列。然后把第二个元素插入到前面有序的序列中,以此类推。把元素插入有序的序列,先从有序序列的最后一个元素开始比较,如果条件成立(大于或者小于),则元素向后移动。代码#include <stdio.h>#include <stdlib.h>#include <time.h...

2020-03-16 23:00:03 248

原创 【二叉树】--C语言实现创建二叉搜索树

二叉搜索树创建二叉搜索树的过程很简单,第一个数字作为根,第二个数字,如果比根大,则作为根的右子树,如果比根小,则作为根的左子树。一次类推。对一棵二叉搜索树进行中序遍历,可以的到一个有序的序列。代码#include <stdio.h>#include <stdlib.h>struct Node{ int data; struct Node *le...

2020-03-16 15:26:56 150

原创 如何在Linux下检测程序是否存在内存泄漏?

C语言是嵌入式开发中永远回避不了的语言,不管是操作系统还是裸机开发,无处不体现着C语言的高效。 C语言可以直接操作内存,有着完善的内存管理机制,用好了可以削铁如泥,用不好自断一臂!不管是C还是C++,很多同学都不可避免犯内存泄漏的错误。因为我们平时写的都是些小程序,就算申请的内存没有释放,也不会影响程序结果,所以很少会关注内存泄漏的问题。但是如果把这个问题放在商用的项目中,就会是一个不小的隐患。...

2020-03-09 18:38:41 428

原创 【排序】--C语言实现基数排序

基数排序基数排序适合整理较大的数据。先根据个位数排序,再根据十位数排序,以此类推,最终得到一组有序的数据。代码复杂的地方是如果收集数据。先定义十个“桶”,将个位按照具体的数字放在对应的“桶”内。收集的过程需要重新申请一块空间,从原始序列的最后一个数字开始,找出它在新序列中的位置,循环完成收集。代码#include <stdio.h>#include <stdlib.h&g...

2020-03-07 21:47:54 226

原创 【排序】--C语言实现归并排序

归并排序归并排序将两个有序的序列合并成一个有序的序列。如何得到两个有序的序列,把数据不停的拆分,拆到每个序列只有一个数据。所以归并排序用到了递归思想。代码#include <stdio.h>#include <stdlib.h>//两个有序的序列合并成一个有序的序列void Merge(int *a, int start, int mid, int end)...

2020-03-07 13:24:11 1427

原创 【排序】--C语言实现堆排序

堆排序堆排序使用【大顶堆】或者【小顶堆】实现。分为两步:构建堆和调整堆,主要时间都花在了构建堆上。堆排序效率比较高,适用于数据量比较大的场景。代码#include <stdio.h>/*函数描述:构建大顶堆函数参数:数组 根节点的下标 最后一个结点的下标*/void AdjustMaxHeap(int *a, int root, int last){ int ...

2020-03-07 13:14:54 245

原创 【排序】--C语言实现希尔排序

希尔排序希尔排序属于一种插入排序,如果搞懂了直接插入排序,你会发现希尔排序就是多了一层循环。希尔排序比直接插入排序效率高的多,直接插入排序一次只能移动一个位置,但是希尔排序因为多了【增量】的概念,一次可以移动多个位置。把一组无序的数据变得基本有序后最后再使用直接插入排序。代码#include <stdio.h>void InsertSort(int *a, int lengt...

2020-03-07 13:04:26 1245

原创 【小米笔试题】密码破译-C语言实现

题目我们来做一个简单的密码破译游戏。破译的规则很简单,将数字转换为字母,1转化为a,2转化为b,依此类推,26转化为z。现在输入的密码是一串数字,输出的破译结果是该数字串通过转换规则所能产生的所有字符串。输入:多行数据,每行为一个数字串。输出:多行数据,没行对应输出通过数字串破译得到的所有字符串,并按照字符串顺序排列,字符串之间用单个空格分隔,每行开头和结尾不允许有多余的空格。样例输...

2020-03-07 11:40:19 1370

原创 C++ Stack实现四则运算

calculator.cpp#include <iostream>#include <stack>using namespace std;int Priority(char ch){ switch(ch) { case '(': return 3; case '*': case '/': return 2; case '+':...

2020-03-07 11:04:01 307

原创 C语言使用栈实现逆波兰表达式 | 四则运算 | 后缀表达式

calculator.c#include <stdio.h>#include <stdlib.h>#define OK 1000000#define ERROR 1000001struct node{ int data; struct node *next;};typedef struct node Node;struct ...

2020-03-07 10:51:54 437

原创 分享几个互联网求职神器,搞明白了,春招再严峻也不用担心!

每年的3月4月,9月10月,都是应届生求职的高峰时期。今年虽然有疫情影响,但是求职的进程的还是会慢慢向前推动!求职无非就是笔试+面试,对于应届生来说,笔试靠刷题,面试靠在校的项目经历,剩下的就看你的临场发挥了。今天就给大家推荐几款求职神器,搞定了,能不能拿到大厂offer不好说,起码找份开发的工作还是可以的。01 牛客网牛客网是一个专门面向程序员大学生的IT技能学习、备考、求职题库,包括了...

2020-03-06 20:22:53 520

原创 详细盘点C语言在工作中的实际应用

前两天有个大一的同学问我:为什么要学习C语言,听学长说好像要用它过国家的二级?!这个回答很实用,因为相关专业的同学如果过不了国家二级的话,连毕业都困难。但是C语言的作用绝非这个。今天就来给大家详细盘点C语言的实际应用。01 可编程芯片给大家找了几块芯片:51单片机是电子、自动化等专业同学的必修课程。它体积大、处理能力低,虽然缺点明显了一点,但非常适合学习入门。单片机里面跑的程序就是C语言...

2020-03-05 10:41:02 1613

原创 C语言使用json-c发送网络数据

之前做项目的时候,在嵌入式端侧用到了json数据格式,主要负责和服务器通信使用。json-c网上的资料很少,所以下面总结一些,再附上一些代码,供大家参考使用。json-c安装:apt-get install libjson0-dev libjson0-dev软件包里面有json-c的头文件以及开发需要的库文件。头文件放在了/usr/include/json/json.h目录下,写代码的时候...

2020-03-03 12:24:16 867

原创 如何区分优质程序猿?递归的修炼之路!

递归是程序运行时的一种现象,也是解决某些特定问题时较迭代算法来说更自然更优雅的代码组织方式。作为程序员工作了多年后,我发现除了用发量来区分一名程序猿是否优秀以外,能不能理解好递归、能不能用递归来解决问题也是区分好程序员和差程序员的试金石。很多同学通过学习掌握了某些语言的语法,也能写一些代码,但是一遇递归就头大。下面就来给大家总结总结。谈到递归,我们的C语言老师可能会说递归就是「函数自己调用自己」...

2020-03-02 15:08:16 241

原创 如何用栈实现深度优先算法-C语言解决迷宫问题

数据结构一直都是专业课里面比较难的一门课程,因为里面涉及到了很多算法知识。这也给大家造成了一个困扰,是不是智商不行就学不了数据结构?显然不是!算法知识确实很难,但是我们在学习的过程中很少会去开发新的算法,基本上都是在别人的成果上加以探索。其实只要是愿意花时间,善于归纳总结,我们还是能发现很多算法的规律。看的多了,就很容易在解决实际问题的时候联想到对应的算法。直奔主题吧。栈结构我们在之前的课堂上...

2020-03-01 20:24:03 463

原创 如何用队列实现广度优先算法-C语言解决迷宫问题

广度优先搜索算法(也称宽度优先搜索,缩写BFS)是图里面常用的一种遍历算法。这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和广度优先搜索类似的思想。广度优先算法属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。基本过程,BFS是从根节点开始,沿着树(图...

2020-03-01 20:12:25 644

原创 让段错误不再是一个错误

今天的主题是:访问了空指针一定会出现段错误(segmentation fault)吗?看下面代码:test.c#include <stdio.h>int main(){ int *p = NULL; *p = 1; return 0;}在Linux里面写了这么多代码,大家应该很清楚,上面的代码会出现段错误,因为访问了空指针。#gcc te...

2020-03-01 18:04:22 470

原创 僵尸进程该怎么处理?

为了让大家更好的理解僵尸这个概念先给大家看下百度百科对僵尸的定义:僵尸(Jiang Shi): 顾名思义,僵硬的尸体;又名跳尸、移尸。在中华民间传说中,特指人类死后,尸体因为阴气过重而变异而成的鬼怪,毫无人性,丧失理智,双手向前横着伸直展开,且用双腿不停跳跃,从而移动的行尸走肉,除了头部和四肢,身子其他部位难以运动。加上由于近代影视的设想,往往会拥有超自然力量,比如力大无穷、刀枪不入、抗腐化等;...

2020-03-01 12:58:27 526

原创 哪些工具可以让嵌入式开发事半功倍?详细盘点嵌入式工程师必备工具!

平时上课的时候,我们都习惯了使用vim来写代码,好像在嵌入式开发中一个vim可以走天下。就跟有些从事单片机开发的工程师一样,安装一个keil软件,就能完成编码、编译、下载、调试。其实在嵌入式开发中使用的工具有很多,真正写代码的时候,也不会有人选择vim,因为它的编码效率实在是低,就跟记事本一样,每个字符都要自己去敲。所以这篇文章就跟大家推荐一些嵌入式开发工程师必备的几个工具,让你在开发中能够事...

2020-02-29 20:57:38 3017

原创 疫情之下,金三银四的春季招聘还有吗?

昨天,教育部对开学时间做出了回应: 原则上疫情得到有效控制前大学生不返校、高校不开学…史上最长的寒假,本应该是开学的日子,却不得不在家呆着!当然,这对于大一大二大三的同学,影响不大(甚至可开心了);但是对于毕业班的同学,却是乱了阵脚,尤其是还没有落实工作的同学。各类高校明确暂停现场招聘,向用人单位发出了暂时转为线上招聘的通知,企业招聘节奏放缓…各种迹象似乎都预示着 即将到来的金三银四招聘热...

2020-02-29 19:17:23 2712

原创 【LeetCode大厂笔试题】之变态指针!

很多同学在学完指针后,弄懂了「*」和「&」的含义,又写了几个字符串相关的编程题,再刷几道指针笔试题,感觉指针精通了。其实C语言中的指针真是博大精深,他的复杂程度绝对超过你的想象。比如前两天一个同学来问我的问题,先看下代码:#include <stdio.h>int main(){ const char *ptr[] = {"Welcome", "to", "B...

2020-02-29 18:51:28 2667

原创 常用C库函数的实现

手撕代码一向是笔试面试必不可少的环节算法、C库、操作系统…实现C语言库函数我们在课上也经常会给大家写,但是都不够全面。所以今天就给大家总结了一下。常见C库函数的实现代码奉上01memcpy函数原型void *memcpy(void *dest, const void *src, size_t n);返回值返回指向dest的指针。​void *memcpy(void *de...

2020-02-21 11:33:24 433

原创 那些年面试官搞的“骚”操作!! 用一篇文章彻底搞懂自增自减

自增运算符在笔试的时候出现的概率很高,这种题目也很恶心,分析起来很废脑细胞,而且一旦有一步分析错误,结果就不对了。下面给大家总结一些常见的题目,基本上覆盖了所有和单目运算符相关的题型。做题目之前,先要弄懂前置和后置的区别,也许题目会很复杂,但基本原则是不会变的。a++:执行a所在语句之后,a的值加1;++a:执行a所在语句之前,a的值加1。先来看一道入门题#include <st...

2020-02-12 21:47:26 432

原创 外包程序猿的漫漫人生路

外包公司一直是个敏感的话题在程序员的脑海里它工资低、加班多、没有技术含量…招聘时HR小姐姐描述成这样:实际工作了以后发现时这样的:好像进了外包公司就像掉进了坑一样。很多同学对外包offer也存在很多顾虑,所以今天就来给大家分析一下,毕竟我自己也在外包公司呆过一年时间。外包的形式好了,我们先从外包的概念说起,什么是外包公司?外包有两种形式,TM和FP,通俗点理解,就是人力外包...

2020-02-09 21:50:15 1762

原创 牛逼!一行代码解决约瑟夫环问题!

问题描述编号为1-N的N个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到3的士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。01数组首先申请一个n个元素的数组空间,全部设置为0,表示所有人都在圈内,之后设立一个计数器,从零开始计数,记到指定数目时有人出圈,将计数器清零,该人出圈(数...

2020-02-05 14:48:29 711

原创 学益得线上课堂之最简单又最难理解的系统调用-fork

对于刚刚接触Linux的同学,fork一定是大家最头疼的概念,它看起来很简单,但理解起来却十分的复杂。我们先来从一道经典的笔试题开始。#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>int main(){ int i;...

2020-02-05 14:28:11 349

原创 学益得线上课堂之位运算技巧总结

程序中的所有数在计算机内存中都是以二进制的形式存储的。所谓位运算,就是直接对整数在内存中的二进制位进行操作。一般来说,如果能用位运算来解决问题,效率都是比较高的。01 判断奇偶数传统解法判断数字的奇偶性从概念就能下手,一个数字如果能被2整除,就是偶数,如果不能,就是奇数。代码如下:void odd_even(int n){ if (n % 2 == 1) { ...

2020-01-30 11:03:18 285

原创 学益得线上课堂之C语言关键字

C语言有32个关键字,比如为我们常见的int、char、double、return等等都是,但是这些往往并不是考查的重点对象。各大公司的笔试题,从来都不会放过对关键字的考查,下面小李老师就给大家整理了几个比较重要的关键字,大家要牢记哦。static关键字的作用static的用途主要有两个,一是用于修饰存储类型使之成为静态存储类型,二是用于修饰链接属性使之成为内部链接属性。是不是没有看懂,讲...

2019-12-29 23:19:02 307

C语言排序算法.zip

包括7种排序 直接插入排序、希尔排序、快速排序、简单选择排序、堆排序、归并排序、基数排序,C语言实现。

2020-04-14

QT介绍.pptx

Qt的简单介绍,用于初学者和刚入门的同学,可以作为老师上课的课件使用

2019-08-01

Uboot命令详细解析

uboot命令详解

2017-07-24

空空如也

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