自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

forgetjoker的博客

嵌入式linux

  • 博客(26)
  • 收藏
  • 关注

原创 linux不能创建共享文件夹

在VMware上创建虚拟机之后,linux /mnt/hgfs/文件夹下没有生成对应的共享文件夹/usr/binmhgfs-fuse .host:/ /mnt/hgfs -o subtype=vmhgfs-fuse,allow_other

2022-02-28 12:05:50 995

原创 STM32自己写printf函数方法(不用重定向)

stm32有几个串口可以使用,当我们想用printf打印数据到上位机时,通常是使用fput重定向当我们要多个串口使用printf格式函数时,可以在写一个类似printf的函数:#include <stdarg.h>#define USART3_SEND_LEN 300void USART3_printf (char *fmt, ...) { char buffer[USART3_SEND_LEN+1]; // CMD_BUFFER_LEN³¤¶È×Ô¼º¶¨Òå°É in

2022-02-27 17:58:59 6642

原创 C语言 static关键字的作用

在C语言中,static关键字有以下几个作用1.在修饰局部变量时:①改变了其存储位置,储存在静态区,改变了变量的生存周期。②它只被初始化一次,若未初始化,则系统自动初始化为02.在修饰全局变量时:①改变了其作用域,该变量只能在该文件内的被所用函数访问。3.在修饰函数时:①改变了其作用域,该函数只能在该文件中被使用。...

2021-07-07 15:39:40 338

原创 Ubuntu18.04 安装花生壳并使用

一、到花生壳官网下载linux版本的花生壳一般下载到Downlaods文件夹1.进入文件夹dpkg -i phddns_5_1_amd64.deb //安装花生壳dpkg -r phddns //卸载花生壳2.登录花生壳管理网站b.oray.com在Ubuntu中输入命令查看sn码,默认密码为adminphddhn status登录之后绑定自己的手机号二、在管理页面设置内网穿透1.我选的是tcp连接2.外网域名用花生壳提供的域名3.外网端口用动态端口4.内网主机地址通过i

2021-06-23 22:09:38 6332 3

原创 linux Makefile 如何将生成的.o文件放到指定文件夹

如何将生成的.o文件放到指定文件夹#目标文件名target = smartRoom#编译工具链cc := arm-linux-gnueabihf-gcc #链接库的文件路径、头文件路径与要链接的库PI_LIB_PATH := -I /home/lgb/piLib/piInclude/WiringPi/wiringPi -L /home/lgb/piLib -lwiringPi#.o文件存放路径O_PATH = ./obj#源文件路径SUBDIR := $(shell pwd)

2021-06-07 22:25:17 10171

原创 stm32f103RCT6 软件模拟 I2C写入字节

I2C时序介绍1.起始信号I2C通信的开始标志,告诉从机开始通信。当信号线(SCL)信号线维持高电平时,数据线(SDA)由高变低。2.停止信号I2C通信停止信号,告诉从机停止通信。当信号线(SCL)维持为高电平时,数据线(SDA)有低变高。3.数据传输(一次传输一个字节,由字节高位开始传输)数据传输时,必须保证数据线(SCL)保持高电平,并且数据线(SDA)稳定,要变化数据时,需将时钟线拉低。4.应答信号在数据传输完成(8位,一个字节)后,第九个时钟时,将数据线设置为输入,从机会发

2021-06-01 16:14:06 2069 2

原创 C语言如何判读一个系统的大小端存储模式

小端存储:一个数据的低位字节存在在内存的低地址中大端存储:一个数据的高位字节储存在内存的高地址中#include <stdio.h>int main(){ int a = 0x12345678; char *p = (char *)&a; printf("%x\n",p[0]); if(p[0] == 0x12) { printf("small\n");

2021-05-21 20:32:48 108

原创 C语言中 全局变量和局部变量的区别

全区变量 : 储存在静态单元中,占用静态的储存单元。局部变量:储存在栈中,只有在函数在调用时才开始分配内存

2021-05-18 14:00:28 224

原创 C语言中 include < > 和include“ “ 的区别

C语言中会使用 include < > 和include" " 来引用头文件。include < > :会从编译器自带的库函数的路径下去找include " " :会先从自定义的文件中寻找文件, 寻找不到再到库函数中寻找文件

2021-05-18 13:57:24 653

原创 linux下 arm 交叉编译器的安装与使用

我们在Ubuntu下编译的c程序是通过gcc编译器编译的在Ubuntu(X86)架构下运行的,在arm架构上是不能运行的。所以我们要使用交叉编译器在Ubuntu上编译出可以在arm架构上运行的程序!https://github.com/raspberrypi/tools.git在这个网址上面下载交叉编译工具点击Code->download ZIP下载下载好后再Ubuntu下创建一个tools文件夹用来存放交叉编译工具,将下载好的交叉编译工具传到Ubuntu的tools文件夹里面,解压文件

2021-04-30 11:03:29 4854 2

原创 linux 添加头文件路径和动态库路径

我们在用到别人的库的时候会去引用别人提供的动态库和头文件,这时候我们要在linux中指定头文件的路径和动态库的路径。添加方法添加头文件路径一,在工作目录下的.bashrc下添加路径C_INCLUDE_PATH=$C_INCLUDE_PATH:后面跟头文件的绝对路径,我们可以进入下安装路径的include下pwd查看路径。export C_INCLUDE_PATH添加完成后保存退出sourc .bashrc 跟新下文件或者修改 /etc/profile文件,在最后添加上面的信息,不过p

2021-04-24 16:01:16 1041

原创 linux 多线程 pthread库 API

线程的创建:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);参数介绍:pthread_t *thread ------------------------用于标识一个线程const pthread_attr_t *attr--------------该指针用来指定线程的属性,若为NULL则

2021-04-05 21:29:39 992

原创 linux 线程与进程的简单区别

进程与线程的区别一个进程至少包含一个线程,线程可以在同一时刻做不止一件事情;进程是线程的容器,里面可以包含很多个线程。进程:是资源分配的最小单位线程:是程序执行的最小单位区别一:进程:父进程创建子进程(fork()函数创建子进程),是拷贝整个内存空间,后面进行优化成了写实拷贝。线程:本身不具有内存空间,都是共享进程的内存空间。区别二:进程:进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响。线程:线程有自己的堆栈和局部变量,但没有独立的地址空间,多个线程是共享进程的内

2021-03-30 12:16:58 1502

原创 linux中>和>>的区别

linux中:>表示覆盖原文件内容,>>表示追加内容,在文件后添加下面这段代码是运行当前文件夹下的pthread程序#include <stdlib.h>int main(int argc,char **argv){ int i; int cont = atoi(argv[1]); for(i=0;i<cont;i++) { system("./pthread"); } return

2021-03-26 14:23:26 207

原创 linux 软链接创建及拷贝

linux软链接linux中的软链接相当于widow的快捷方式,在执行软链接文件时,系统会去执行软链接指向的文件。linux软链接含义:为某一个文件在另外一个位置建立一个同步的链接。软链接的好处:仅仅是个链接,不占用空间,使用还是照常使用。用途:我们有时候使用第三方的工具,可能这个工具的库很大,很占用磁盘空间,想把它移动个位置,但是移动了位置那这个工具岂不是找不到这个目录下的文件了,然后修改第三方工具显然不现实,那么软链接的作用就来了,把文件搬去其他地方,在原来的位置创建软连接,在用软链接时,

2021-03-22 11:05:39 3959

原创 C语言printf函数中指针偏移

先看代码#include <stdio.h>int main(){ int arr[] = {1,2,3,4,5}; int *p = arr; for(size_t i = 0; i<5;i++) { printf("%d %d \n",p[i],*p++); } return 0;}执行结果:2 14 232764 3312

2021-03-19 20:08:42 579

原创 stm32 GPIO输入输出模式

输入模式1.浮空输入2.上拉输入3.下拉输入4.模拟输入输出模式1.开漏输出2.推挽输出3.推完复用输出4.开漏复用输出

2021-03-16 12:58:05 361

原创 C语言 printf函数执行顺序

printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是,从右边开始处理的。我们先看下这段代码,C语言经典面试题:#include <stdio.h>int main(){ int arr[] = {11,12,13,14,15}; int *p = arr; *(++p) += 100; printf("%d %d \n",*(p),*(p++))

2021-03-15 14:57:18 1459

原创 linux open fopen popen函数区别

open 函数(打开一个文件)与 read, write 等配合使用1.1包含头文件#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>1.2函数原型int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);open函数返回一个文件描述符,一个小的非负

2021-03-15 14:43:32 726

原创 C语言-取数组首地址

我们先看下面这段代码: #include <stdio.h> int main() { int arr[] = {1,2,3,4,5}; int *p =(int*)(&arr+1); //&arr操作的是整个数组,返回的指针指向整个数组,&arr+1偏移的是整个数组的长度。 printf("%p %p \n",arr,&arr); printf("%p %p \n",arr+1,

2021-03-10 15:51:51 3407

原创 linux fork与vfork创建进程的区别

区别一:fork函数创建子进程后,父子进程同时运行,运行先后顺序取决于linux内核的进程调度。

2021-03-07 12:45:51 174

原创 linux进程的相关概念

1.什么是进程?什么是程序?有什么区别?程序是静态的概念,我们在gcc编译某个.c文件时生成的文件叫做程序。进程是动态的概念,是程序的一次运行活动,我们在 (./a.out) 运行程序的时候,系统中就多了一个进程.。2.如何查看系统中有哪些进程?(1)使用ps -aux 指令进行查看,ps -aux会列出系统中的所有进程,我们可以加个管道进行过滤 出我们想要查看的进程,使用 “|grep” ,我们可以通过 (ps -aux |grep 自己想查看的进程)命令查看进程。① ps -aux

2021-03-05 12:57:13 138

原创 linux没有安装OpenSSL库时,编译libcurl库报错,使libcurl库支持HTTPS,

为什么要安装opensLL库libcurl库安装的时候如果要支持https网络,就要依赖于OpenSSL库。如何安装OpenSSL库1 在linux终端下输入命令wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz命令让linux下的开源工具wget在linux源码里面去找OpenSSL库。2 解压文件tar vxf wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz

2021-03-04 13:52:00 549 2

原创 linux静态库/动态库的制作与使用

linux静/动态库的制作与使用我们在写代码时会不想别人看到我们实现静态库的制作与使用1.静态库的格式:xxx.a2.静态库制作:  ①gcc xxx.c -c(生成 xxx.o)  ②ar rcs libxxx.a xxx.o (将.o文件生成.a文件)3.静态库的使用(编译.c文件时链接制作的静态库):gcc xxx(主程序).c -lxxx(.o文件加l并去掉.o) -L(从指定路径去找库)-o(生成执行文件)(没有指定库路径时系统会默认在/usr/lib 或者 /usr/loc

2021-02-21 23:09:21 168

原创 linux常用命令

linux常用命令ls 列出当前文件夹有哪些文件pwd 显示当前在哪个文件夹下mkdir 创建新的目录cd cdxxx 进入xxx文件夹里cd … 退回上层文件夹tab键 自动补全(文件名长的)mv 1.移动(mv *c xxx 将所有文件移

2021-02-21 22:06:26 140

原创 Linux 安装libcurl库及初次编译

Linux 安装libcurl库及初次编译libcurl库下载链接https://github.com/curl/curl/releases/tag/curl-7_71_1拿到linux中解压终端输入: tar vxf tar xvf curl-7.71.1.tar.bz2配置libcurl库进入解压好的文件./configure --prefix=$PWD/_install(会在解压文件里生成_install文件夹,里面存放配置文件:动态库,头文件等)makemake instal

2021-02-20 13:25:00 1060

空空如也

空空如也

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

TA关注的人

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