自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小阳先生

软硬结合,内外兼修=最强大的嵌入式工程师

  • 博客(143)
  • 资源 (1)
  • 收藏
  • 关注

原创 CAN总线上的报文帧类型(N_PCI)

现在真的只想吃现成的,越快的掌握看懂才爽,所以不写太多文字,只把比较主要的标注一下。个人学习使用。这个写的非常好,超级推荐更深入一点的朋友。

2023-05-22 22:53:12 3572

原创 一文掌握DTC

DTC的全称是Diagnostic Trouble Code,即诊断故障码。就是当汽车里出现了故障,ECU会发出一串数字,它可以帮我们找到故障的原因,可以更快速的定位解决问题。借用网上经常看到的例子:欠电压故障假设汽车正常的工作电压是10-18V,当此时的电压是8V,是不是就会出现打不着火,汽车不工作的故障呀?我们肉眼看不出来为什么汽车不工作,但是我们可以通过读取DTC码来找到原因。

2023-05-14 21:02:41 2741

原创 Switch的一些用法

简简单单

2022-12-26 14:31:19 337

原创 AUTOSAR中的接口类型

1.“AUTOSAR接口”“标准化AUTOSAR接口”和“标准化接口”。

2022-05-09 15:32:52 3260

原创 AUTOSAR-基本概念

1. 概念AUTOSAR,全称为Automotive Open System Architecture,即汽车开放系统架构。它是由全球各家汽车制造商、零部件供应商以及各种研究、服务机构共同参与的一种汽车电子系统的合作开发框架,并建立了一个开放的汽车控制器(ECU)标准软件架构。2.传统制造时的缺陷软件重用性极差;硬件平台各式各样,难以统一、重用;软件模块化极其有限;嵌入式系统不支持硬件抽象。软件成本占比增加3.AUTOSAR的优点提高软件复用度,尤其是跨平台的复用度,提高了系统的整

2022-05-07 15:46:44 1745

原创 参数和指针

1.普通变量进行数值交换#include <stdio.h>void swap(int a,int b);void swap(int a,int b){ int temp; printf("in swap交换前: a=%d,b=%d\n",a,b); temp=a; a=b; b=temp; printf("in swap交换后:a=%d,b=%d\n",a,b);}int main(){ int a=1,b=2; printf("in main交换前:a=%d,

2022-05-02 16:29:15 473

原创 常量指针与指针常量

之前面试遇到了一道题,这也就是相当于记录一下而已。你觉得答案如何呢?1.指针常量意思:它是一个常量,但是通过指针修饰了一下。表达:int * const p#include <stdio.h>int main(){ int a,b; int *const p=&a; *p=1; p=&b;//这里是错误的 printf("%d\n",*p);//这个毫无疑问可以打印出来1 printf("%p\n",p);//这个可以打印出来什么? return

2022-05-02 00:22:08 727 2

原创 二级指针与数组之间的运算

解析图片:num里的值为520p里面存放的是num的地址解引用*p就是求出num中存放的数据pp里面存放的是p的地址解引用*pp就是求出p中的数据,也就是num的地址再解引用**pp就是求出p地址中存放的数据,也就是num的数据代码1:(二级指针)#include <stdio.h>int main(){ int num=520; int *p=&num; int **pp=&p; printf("num:%d\n",num); prin.

2022-05-01 17:45:03 402

原创 计算数组A的大小与地址

这是当时面试时遇到的一道题,我觉得要是都能答对了,那么对C语言的掌握程度已经可以达到工作的水平了。1.先看题已知数组A(基于32位MCU)的地址为0x80000000,数组为A[100]。求:sizeof(A)sizeof(A[0])sizeof(&A)sizeof(&A[0])&A+1&A[0]+1其实不想写结果的,但是一方面内容太少,第二方面就是还想自己留着看,那还得写2.解析考察数组的大小考察数组中一个元素的大小考察指针的大小,你知道&

2022-04-30 23:07:57 1278

原创 指针数组和数组指针

1.如何进行分别?根据运算符的优先级来判断是数组指针还是指针数组。2.指针数组例如:int * p1[5]为指针数组。[ ]的优先级为1大于 * 的优先级2,所以它是个数组。数组里的每个成员都是指针,所以叫做 指针数组。结论:指针数组是个数组,每个数组元素存放一个指针变量。#include <stdio.h>int main(){ char *p1[6]={ "张明阳", "郭恒", "杨浩", "赵世凯", "吕冠潮",

2022-04-30 21:31:09 399

原创 指针的基础运算(1)

#include <stdio.h>#include <string.h>int main(){ char a[]="ming yang"; int b[5]={1,2,3,4,5}; float c[5]={1.1,1.2,1.3,1.4,1.5}; double d[5]={1.1,1.2,1.3,1.4,1.5}; int *p=b; printf("*p=%d,*p+1=%d,*p+2=%d\n",*p,*p+1,*p+2); printf...

2022-04-30 15:52:43 308

原创 #define SQUARE(n) n*n?

标题里这样定义求取n的平方,你们觉得对吗?有没有优化的地方呢?其实第一眼看上去并没有什么不对,但是其实真的有很多优化的地方。在程序里调用一下。优化一:假如这样调用呢?SQUARE(3+2); //结果会是25嘛?此时我们需要这样定义#define SQUARE(n) (n)*(n)优化二:如果这样调用呢?12/SQUARE(2) //结果会是3吗?这时我们只需要再加一个括号就可以了。#define SQUARE(n) ((n)*(n))优化三但是在不同环境下编译器

2022-03-29 13:58:08 581

原创 Freertos-递归锁

1.死锁的概念假设有 2 个互斥量 M1、 M2, 2 个任务 A、 B:A 获得了互斥量 M1B 获得了互斥量 M2A 还要获得互斥量 M2 才能运行,结果 A 阻塞B 还要获得互斥量 M1 才能运行,结果 B 阻塞A、 B 都阻塞,再无法释放它们持有的互斥量死锁发生!2.自我死锁任务 A 获得了互斥锁 M它调用一个函数函数要去获取同一个互斥锁 M,于是它阻塞:任务 A 休眠,等待任务 A来释放互斥锁!死锁发生!3.递归锁任务 A 获得递归锁 M 后,它还可以多次去

2022-03-08 16:41:26 823

原创 Freertos-互斥量的基本使用

刚创建的互斥量可以被成功"take"“take"互斥量成功的任务,被称为"holder”,只能由它"give"互斥量;别的任务"give"不成功。在 ISR 中不能使用互斥量。本程序创建 2 个发送任务:故意发送大量的字符。 可以做 2 个实验:使用互斥量:可以看到任务 1、任务 2 打印的字符串没有混杂在一起。不使用互斥量:任务 1、任务 2 打印的字符串混杂在一起。main函数/* 互斥量句柄 */SemaphoreHandle_t xMutex;int main( void ).

2022-03-03 15:41:13 823

原创 freertos之队列的阻塞访问

1.概念只要知道队列的句柄,谁都可以读、写该队列。任务、 ISR 都可读、写队列。可以多个任务读写队列。任务读写队列时,简单地说:如果读写不成功,则阻塞;可以指定超时时间。如果能读写了就马上进入就绪态,否则就阻塞直到超时。读取队列的任务个数没有限制,那么当多个任务读取空队列时,这些任务都会进入阻塞状态。写队列的任务个数没有限制,那么当多个任务写"满队列"时,这些任务都会进入阻塞状态。有多个任务在等待同一个队列的数据。当队列中有数据时,哪个任务会进入就绪态?优先级最高的任务如果大家的优先级相

2022-03-03 15:14:55 1857

原创 Freertos中空闲任务的重要性

1. 代码这次反着来,我们先看一段代码;任务 1:任务 1 的大循环里,创建任务 2,然后休眠一段时间任务 2:打印一句话,然后就删除自己任务1代码:void vTask1( void *pvParameters ){ const TickType_t xDelay100ms = pdMS_TO_TICKS( 100UL ); BaseType_t ret; for( ;; ) { printf("Task1 is running\r\n"); ret = xT

2022-03-01 15:50:05 1436 1

原创 keil5中逻辑分析仪的使用

逻辑分析仪:观察全局变量的波形,根据波形解析任务的执行情况第一步:首先在“main.c”的主函数加入断点,在代码行前的灰色处,点击一下就会有一个红色小点,就是设置的“断点”。第二步:方法1:方法2:有时候,会出现无法添加全局变量的情况,重新打开一下程序即可。第三步:总结:...

2022-03-01 15:36:32 5377

原创 Freertos中两个delay函数

vTaskDelay:至少等待指定个数的 Tick Interrupt 才能变为就绪状态vTaskDelayUntil:等待到指定的绝对时刻,才能变为就绪态。main代码:int main( void ){ prvSetupHardware(); /* Task1的优先级更高, Task1先执行 */ xTaskCreate( vTask1, "Task 1", 1000, NULL, 2, NULL ); xTaskCreate( vTask2, "Task 2", 1000, NUL

2022-03-01 15:35:32 2492

原创 linux-进程的初步认识

1. 什么是进程?进程是一个运行着的程序,它包含了程序在运行时的各个资源,进程是linux进行调度的基本单位,也是一个程序运行的基本单位。进程就好比多任务,在我们编程中,进程就好比多个main在同时执行.2. 进程状态进程是程序的执行过程,根据它的生命周期可以划分成 3 种状态。执行态: 该进程正在运行,即进程正在占用 CPU, 任何时候都只有一个进程。就绪态: 进程已经具备执行的一切条件,正在等待分配 CPU 的处理时间片。等待态: 进程正在等待某些事件,当前不能分配时间片,进程不

2022-02-25 14:45:50 1113

原创 linux下文件属性信息及目录操作

1.获取文件的属性函数功能:获取一个文件的属性函数头文件: #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <time.h>函数原型: int stat(const char *pathname, struct stat *buf);函数的参数:

2022-02-24 14:01:58 386

原创 linux 下的时间编程

1.date命令日期可以以多种格式去打印,也可以使用命令设置固定的格式。在类 UNIX 系统中,日期被存储为一个整数,其大小为自世界标准时间( UTC) 1970 年 1 月 1 日 0 时 0 分 0 秒起流逝的秒数。使用 date 命令可以查看系统时间。2.Linux 下的时间结构体struct tm{ int tm_sec; /*秒:取值区间为[0,59] */ int tm_min; /*分:取值区间为[0,59] */ int tm_hour; /*时:取值区间为[0,23

2022-02-24 14:01:38 407

原创 linux文件操作

时刻记住一句话:Linux下一切皆文件,不管什么都是一个文件1.系统IO和标准IO文件操作一般分为两种:1、系统IO:系统调用接口,open(), read(), write(), close()。是操作系统直接提供的编程接口(API)。2、标准IO:标准库的I/O函数,fopen(), fread(), fwrite(), fclose(),是对系统调用接口进一步封装。2.系统I/O函数2.1 函数打开:open函数的功能:打开一个文件函数头文件:#include <sys/ty

2022-02-23 10:57:55 2351

原创 shell语法编程

1.shell脚本如果有一系列你经常使用的Linux命令,你可以把它们存储在一个文件里,shell可以读取这个文件并顺序执行其中的命令,这样的文件被称为脚本文件。shell 脚本按行解释。2.shell脚本的编写Shell 脚本是纯文本文件,可以使用任何文本编辑器编写Shell 脚本通常是以 .sh 作为后缀名3.shell脚本的执行先添加可执行权限:chmod +x 1.sh再执行:./1.sh 或者 bash 1.sh查看文件的权限:ls -l4.shell脚本的格式第一行

2022-02-10 10:31:23 832

原创 VIM的基本使用

1.vi和vim区别它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。多级撤消在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。易用性vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台语法加亮vim可以用不同的颜色来加亮你的代码。可视化操作就是说vim不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

2022-02-09 09:37:08 312

原创 玩一下链表

1.链表的结构2.创建一个链表3.代码#include <stdio.h>#include <stdlib.h>typedef struct lianbiao{ int date; struct lianbiao *pnext;}link;link *pnew;//新节点link *phead;//头节点link *ptemp;//临时节点int count=1;void creat(void);void add

2022-01-12 16:43:00 282

原创 ST-LINK V2 无法下载程序相关问题

1.两种STLINK2.针对第一款ST-LINK connection error 和 No ST-LINK connected其实并没有那么多的麻烦只需要检查这几点检查连线是否正确检查驱动是否安装更新下ST-LINK固件版本不要使用拓展坞(分线器)开发板一定要先独立供电后,再将ST-LINK插到电脑端3.针对第二款ST-LINK相关问题正常现象2.不正常现象这种情况建议换台电脑试一下,指示灯不亮的情况下很大可能ST-LINK已损坏,一直闪烁时估计是内部电路出现了

2022-01-11 13:31:18 3971 1

原创 STM32文字取模&图片取模

1.文字取模2.图片取模总结这只是文字显示,图片显示的一种方式,可以说还是一种比较笨的方法!可以不用但是要知道。我也是很久不用了,还卡了一些时间。现在大家都是再用字符下载到W25Qxx中,或者直接用文件读写SD卡的方式打开图片。...

2021-12-13 10:00:07 6767 2

原创 KEIL5中的options for Target

1.Target主要介绍工程目标的调试晶振频率、选择的编译器、RAM和ROM分配的地址空间等!1.晶振频率: 这个晶振主要是用于仿真调试2.Use Cross-Module Optimization(一般我们不打勾):作用一:不针对库目标执行跨模块优化。作用二:跨模块优化将增加构建项目所需的时间,因为会自动执行多个编译和链接步骤。Use MicroLIB(打勾):使用微库它是ISO标准C运行时库的子集(其中一部分),提供了性能和代码大小之间的权衡。 微库并不完全兼容ANSI,但对于大多

2021-12-08 17:36:28 8204 1

原创 防痴呆的指针操作(太烧脑了)

第一题int main(){int a[5] = { 1, 2, 3, 4, 5 };int *ptr = (int *)(&a + 1);printf( “%d,%d”, *(a + 1), *(ptr - 1));return 0;}//最终结果为 2 和 5;

2021-11-23 18:05:55 533

原创 虚拟机配置网络

1.进入虚拟网络编辑器2.编辑网络连接3.测试是否连接成功4.额外注意总结虚拟机配置网络时,如果第一次不成功,就还原默认设置。从新配置,桥接的网络要注意与主机的网络保持一致。配置完可以重启虚拟机再进行重新连接。有可能会出现防火墙的问题,可以把防火墙给关掉。...

2021-11-11 09:25:28 597

原创 FreeRTOS的内部机制(基础少勿看)

一.深挖创建任务这里就是创建了一个Task1的任务。点击创建任务往内部跳转。得到如下的一个TCB结构体。TCB结构体在内存里面分配一个TCB结构体表示一个任务的创建。现在问题来了,,1000:代表着这个任务所需栈的大小,为1000*4位,栈的大小:1.取决于局部变量 2.调用深度 所以最好多分配一下 适当调整栈:就是一块空闲的内存vTask1的大小从那里分配呢?从这个大的数组中划分出一部分给某个任务使用。创建的整个流程用图表示:二.任务状态的切换

2021-11-04 15:39:14 539

原创 FreeRTOS中的堆栈计算

1.栈的重要性其实不管是普通的程序还是Freertos程序,分配的栈的大小是很重要的,要不然带不动程序,就容易造成程序的崩溃。函数调用时的现场保护和返回地址,函数的形参,进入中断函数前和中断嵌套等都需要栈空间。2.检测堆大小xPortGetFreeHeapSize()可以获取调用时堆中空闲内存的大小,以字节为单位。使用它可以优化堆的大小。需要注意,当使用heap_3时是不能调用这个函数的。xPortGetMinimumEverFreeHeapSize()此函数返回FreeRTOS应用程序

2021-10-31 17:17:35 4669

原创 Freertos基本概念----(猫和老鼠)

1.实时操作系统与非实时操作系统的区别FreeRTOS中优先级的数值越小,代表该任务的优先级越低,最低优先级为0解释:哈皮狗的优先级最高 次之是汤姆猫 最后是杰瑞鼠 之后依然用这个例子现在有一块大肥肉,哈皮狗 汤姆猫 杰瑞鼠都想吃 那么谁先吃呢?杰瑞鼠看到了一块大肥肉(CPU),迫不及待的就去吃,刚吃一口,汤姆猫来了,杰瑞鼠立刻溜之大吉。汤姆猫开始享受美味,汤姆猫吃饱了离开了/汤姆猫被主人叫走离开了,杰瑞鼠才能继续吃这块肉,你要是问我?汤姆猫要是把肉吃完了,,,,,,你走!在实时操

2021-10-28 11:01:25 620

原创 CAN总线基础知识(填空形式)

1.CAN的ISO[125k-1Mbps]/OSI[125bps-]参考模型的层次结构分为物理层和数据链路层。2.CAN报文帧格包含11位标识符的标准帧和29位标识符的扩展帧。3.微控制器和SJA1000之间状态、控制和命令信号的交换都是在控制段中完成的。4.SJA1000检测到有复位请求,中止当前报文收、发工作,进入到复位模式,当复位请求位出现1到0的变化,CAN控制器将返回到操作模式。5.CAN总线智能节点的软件设计包括:CAN节点初始化、报文发送和报文接收。6.CAN总线上用显性和隐性两个.

2021-10-25 10:54:10 4084

原创 CAN总线代码(二)

其实CAN总线是多主模式,并不是主从模式。我们平时称呼的主CAN,从CAN,其实除了称呼不同,在使用和功能上没有任何区别。1.CAN 节点代码can.c//CAN初始化//tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq//tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq;//tbs1:时间段1的时间单元. 范围:CAN_BS1_1tq ~CAN_BS1_16tq//brp :波特率分频器.范围:1~1024;

2021-10-23 17:08:39 4119

原创 嵌入式工程师必备开发工具

其实入行也有2年了,这两年用到了不少的开发工具,我猜大家很多也都用到过。这里主要是讲一下用到那些工具,安装自己去找教程吧!毕竟安装这些软件可比开发容易多了!1.KEIL5嵌入式产品开发写代码用到的工具。STM32相关之类的。2. VScode可以提示,而且还很规整。建议装到虚拟机下。3.VMware虚拟机LINUX系统驱动学习使用开发必备!4.sourceinsightLINUX内核源码查看开发必备平台,有自动提示补全功能!5.AD20查看修改PCB原理图,硬件电路必备平台6

2021-10-09 16:23:44 10548 2

原创 C语言中的优先级

运算优先级按从高到低依次:留一道头痛的题#include "stdio.h"int main(){ int x=4,y1,y2,y3;// y1=(++x);// y2=(++x)+(++x); y3=(++x)+(++x)+(++x); printf("y3=%d\n",y3); return 0;}//你们觉得y3等于多少?百分之80人都会答错。你以为上面的题会了?#include <stdio.h>int main(){ int i=5,j=5,p.

2021-10-09 11:07:50 189

原创 C语言中基本概念与常用函数

1.什么是预编译,何时需要预编译?总是使用不经常改动的大型代码体。程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。2.局部变量能否和全局变量重名?局部变量可以与全局变量同名,局部变量会屏蔽全局变量。3.如何引用一个已经定义过的全局变量?可以用extern关键字,外部就可以调用这个变量了。4.全局变量是否可以被定义在多个.C文件中吗?可

2021-10-09 09:35:55 439

原创 计算机网络知识

1.路由器用一根网线将这两台电脑连接起来,这两台计算机就构成了一个局域网。如果现在还要再接入两台电脑呢?每台电脑上只有一个网线接口,怎么再接入呢?所以引入了路由器。这样就会使ABCD四台电脑在统一局域网了。路由器:它所连接的网络是处于不同网段的网络,能够使得数据包在不同网段之间转换数据。同理当很多台电脑要组成局域网,可以用路由器一直分线下去。2.IP地址互联网每一台计算机都有IP地址IPV4是32位的IP地址,2019年11月25日已经使用完了;IPV6是32位的IP地址,目前使用

2021-10-08 13:03:14 193

原创 AD20 快捷键设置

1.原理图部分命令注释Ctrl+W画连接线Ctrl+D切换3D画面Ctrl+M测距Shift+C取消测距Ctrl+S保存功能MS整体移动Shift+空格旋转方向Shift+左键拖动复制Ctrl+C复制Ctrl+V粘贴Ctrl+Z撤回2.PCB部分命令注释Shift+E画弯角线PVN通用NO ERC标号PDL分隔线EK裁剪线PF画填充线PL

2021-09-30 14:33:10 4928

嵌入式初级工程师面试问题

本人面试2个星期的问题总结

2021-05-13

空空如也

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

TA关注的人

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