笔记
普通网友
这个作者很懒,什么都没留下…
展开
-
差分信号的测试
差分信号怎么测试是否符合标准?差分信号两个一年相减是什么意思?原创 2021-12-18 11:26:02 · 842 阅读 · 0 评论 -
差分信号的测量方法
下图的黄色线是A线对地电压,蓝线是B线对地电压。为了方便观察,第一个图把两个波形完全分开了,第二个图的“地”在同一水平线上。而A减去B,也就是黄色减去蓝色,就可以得到465总线上的电压情况。可以看出,单个A或是B的波形都不是很理想,定时A-B的波形还不错。大概这就是485通信稳定的一个原因了吧。...原创 2021-12-18 11:22:31 · 4421 阅读 · 0 评论 -
arm状态和thumb状态切换导致usagefault
在ARM的体系结构中,可以工作在三种不同的状态,一是ARM状态此时处理器执行32位的字对齐的ARM指令arm处理器工作于32位指令的状态,所有指令均为32位二是Thumb状态此时处理器执行16位的,半字对齐的THUMB指令。arm执行16位指令的状态,即16位状态Thumb-2状态是ARM7版本的ARM处理器所具有的新的状态,新的thumb-2内核技术兼有16位及32位指令,实现了更高的性能,更有效的功耗及更少地占用内存。总的来说,感觉这个状态除了兼有arm和thumb的优点外,还在这两种状态原创 2021-11-20 17:54:32 · 359 阅读 · 0 评论 -
stm32的mpu配置
static void MPU_Config( void ){ MPU_Region_InitTypeDef MPU_InitStruct; /* 禁止 MPU */ HAL_MPU_Disable(); /* 配置 AXI SRAM 的 MPU 属性为 Write back, Read allocate Write allocate */ //使能MPU MPU_InitStruct.Enable = MPU_REGION_ENABLE原创 2021-11-10 00:09:49 · 1233 阅读 · 0 评论 -
main和_main的区别
arm启动程序中当所有的系统初始化工作完成之后,就需要把程序流程转入主应用程序,即呼叫主应用程序。最简单的一种情况是:IMPORT mainb main直接从启动代码跳转到应用程序的主函数入口,当然主函数名字可以由用户根据自己的喜好随意定义。我们还经常见到另一种使用方法IMPORT __mainB __main这就很容易造成混淆 因为这两个基本都可以跳到main的主函数这里就介绍下集体区别:__main()是编译系统提供的一个函数,负责完成库函数的初始化和初始化应用程序执行环境,最后自动原创 2021-10-30 14:17:49 · 1722 阅读 · 1 评论 -
linux.和stm32驱动的区别
linux下的驱动和stm32驱动的区别?stm32的驱动分为2部分,初始化和发送接收数据,这个理论概括了spi,iic,uart,sdio,usb。在linux下初始化,发送,接收都写到内核里面了,初始化,发送,接收都以注册的方式实现,要发送数据和接收数据的时候,调用发送和接收回调函数实现数据的发送和接收。...原创 2021-09-27 22:07:25 · 341 阅读 · 0 评论 -
linux下互斥锁的经验记录
pthread_mutex_lock(&mutex); /获取互斥锁/number*=2;printf("%d\n",number); pthread_mutex_unlock(&mutex); /释放互斥锁/上锁就是获取锁(拿锁),执行完打印再释放锁。互斥锁和信号量不一样,互斥锁可以在同一线程内使用,用于两个业务之间,两个逻辑之间,保证互斥访问变量,互斥访问资源。...原创 2021-09-27 22:02:08 · 56 阅读 · 0 评论 -
stm32f4架构总结
转载自一位兄弟,感觉真不错一、Cortex-M4的架构Cortex-M4采用ARMv7-ME架构,主要特点有:32位处理器,哈佛结构,三级流水线Thumb-2指令集,扩展的DSP指令和SIMD指令,单周期MAC可选的单精度FPU,可选的MPU,可选的Debug$trace接口可配置的NVIC,可配置的WIC(wakeup interrupt controller)3套AHB-Lite总线接口低功耗,高性能与Cortex-M3内核兼容…二、Cortex-M4流水线Cortex-M4使用一原创 2021-09-02 20:44:22 · 859 阅读 · 0 评论 -
虚函数使用时对应的编译原理
类的普通函数(非虚函数),在内存中地址是唯一的,可以把他们想象成普通函数,只不过第一个参数是this指针,在通过类对象指针调用时,编译器会根据类型找到相应的非虚函数的地址,这个工作是编译期完成的每个类都会维护一个虚表,编译时,编译器根据类的声明创建出虚表,对象被构造时,虚表的地址就会被写入到这个对象内存的起始位置。父类、子类的虚表是不同的,虚表里面的内容也是不一样的(虚表里面记录了要执行的函数的函数指针)。虚函数在执行是一个动态的过程,并不是在编译时就确定下来要执行哪一个函数,而是运行时从虚表查到真正要执原创 2021-07-11 21:07:22 · 143 阅读 · 0 评论 -
c++重载
一、函数重载函数重载是一种特殊情况,C++允许在同一作用域中声明几个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同。注意:c语言不允许函数重载下面同名set,但是不同的形参列表,执行不同的任务。#include "iostream"using namespace std;class Person{public: void set(int num,string name){ this->number=num; this-&g原创 2021-06-27 23:06:23 · 92 阅读 · 1 评论 -
哈希实现转载:夯实基本功
#include <stdio.h>#include <stdlib.h>#include <string.h>#include<iostream>#include<stack>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define SUCCESS 1#define UNSU原创 2021-06-21 09:06:16 · 88 阅读 · 0 评论 -
at指令的由来
AT即Attention,AT指令集是从终端设备(TerminalEquipment,TE)或数据终端设备(DataTerminalEquipment,DTE)向终端适配器(TerminalAdapter,TA)或数据电路终端设备(DataCircuitTerminalEquipment,DCE)发送的。通过TA,TE发送AT指令来控制移动台(MobileStation,MS)的功能,与GSM网络业务进行交互。用户可以通过AT指令进行呼叫、短信、电话本、数据业务、传真等方面的控制。...原创 2021-05-07 08:49:50 · 282 阅读 · 0 评论 -
如何迅速的提扎实自己的基本功
1,接近疯狂的训练,从仿写开始,总结各种基础操作,从排序,查找开始,自律自己的生活,在一个月之内要有成效。过完这个,还要有c++原创 2021-05-06 09:19:36 · 86 阅读 · 0 评论 -
快速排序算法步骤汉字描述
一、场景:对 6 1 2 7 9 3 4 5 10 8 这 10 个数进行排序二、思路:先找一个基准数(一个用来参照的数),为了方便,我们选最左边的 6,希望将 >6 的放到 6 的右边,<6 的放到 6 左边。如:3 1 2 5 4 6 9 7 10 8先假设需要将 6 挪到的位置为 k,k 左边的数 <6,右边的数 >6(1)我们先从初始数列“6 1 2 7 9 3 4 5 10 8 ”的两端开始“探测 ”,先从右边往左找一个 <6 的数,再从左往右找一个 >原创 2021-05-01 11:52:01 · 139 阅读 · 0 评论 -
如何计算空间复杂度实现用到
1、常量空间存储空间大小固定,和输入没有关系时,空间复杂度是O(1)原创 2021-04-27 00:27:41 · 42 阅读 · 0 评论 -
当你花了很多时间在“返工”上时,请阅读以下记录。
本篇转载自别人,系统分析你的输出和付出。你可能算不上极其拼命,但也不能说不努力。很努力,却没有换来预期的进步和收获,这是为什么?这是一个老生常谈的话题:努力,但我会给你提供全新的、更本质的角度看待这个问题。请在阅读这篇文章的过程中始终琢磨一个词:系统困境。系统困境之一再努力也不能直接打开的死结什么是死结?即解决方案就是问题本身:你想转行找一份新媒体工作,可是发现大部分公司都要求有新媒体工作经验;你注册了个公众号,想通过文章被用户大量转发获取种子用户,可是你发现你得先有一批种子用户才行;你原创 2021-04-25 23:17:00 · 117 阅读 · 2 评论 -
时间复杂度概念
什么是时间复杂度???时间复杂度:什么是时间复杂度,从2个角度上讲,从概念上,语句的执行次数T(n)是输入规模n的一个函数,如果存在某一个辅助函数f(n),当n趋于无穷大时,T(n)/f(n)的值为一个不为0的常数,有T(n)=O(f(n)),这就是算法的渐进时间复杂度,从代码实现上,是基本语句的执行次数。错误的说法。因为大O表示的就是时间复杂度,大O中的内容就是语句的执行次数,是我们计算时间复杂度时,只需计算语句的执行次数而已。...原创 2021-04-24 21:43:08 · 99 阅读 · 0 评论 -
当你遇到挫折时看看这篇文章---致1到2年的工程师
此博客转载自别人知道这些表现,你才能在自己的程序员职业生涯中不犯相同的错误。软件行业的工作经验和你从事这个行业的工作年限直接相关。这句话在某种程度上是对的,但是你从事这项工作的年限,并不一定代表你获得了相同年限的工作经验,正如一句话所说:“我们以为我们是工作了十年,其实却只有一年的工作经验,只不过又重复用了九年”。有一些人虽然工作了很多年,但工作表现就像刚入行的新人。他们几乎不学习软件开发的基础知识 。除了最初几年有所成长,后期一直停滞不前,而且他们不明白为什么。与此同时,我也曾与一些只有几年工作原创 2021-04-24 20:12:34 · 77 阅读 · 0 评论 -
二分查找试时间复杂度计算
@一只小鸟飞飞妃 因为二分查找本来就是把n个数的数列对半分,也就是除以2,除k次啊,除到最后就是约束到1个数,那现在把每个2都乘回去,乘k次,最后得到最大的数就n本身啊,n除以n本身就是1...原创 2021-04-23 12:20:19 · 107 阅读 · 0 评论 -
插入排序的核心思路及步骤
插入排序总结:关键词:比较,赋值,冒泡排序思路:从第二个数开始,依次让第二个数以后得数和前面数进行比较,不满足从小到大则交换数据。举例分析如下:以5,3,2,3排序过程如下:第一趟:3 5 2 3第0个元素5认为是排序完成的,从第1个元素开始,第1个元素和第0个元素比较,第1个元素小,所以前移;第二趟:2 3 5 3第2个元素2跟第1个元素5比较,小,所以第二个元素前移,再与第0个元素比较,还小,所以再前移;第三趟:2 3 3 5第3个元素,与第2个元素比较,小,所以第三个元素前原创 2021-04-19 00:22:00 · 375 阅读 · 0 评论 -
排序算法该怎么学习
以上是冒泡排序的具体思路分析,学习冒泡排序需要捋清楚其过程,主要是分析冒泡排序是怎么比较的。原创 2021-04-10 14:06:39 · 65 阅读 · 0 评论 -
嵌套for循环的时间复杂度
Func1函数执行了一个嵌套的for循环(共执行了4 * N2次),又执行了一个单独的for循环(共执行了2 * N次),所以Func1函数的时间复杂度为:T(N) = 4 * N2 + 2 * N//计算Func1的时间复杂度void Func1(int N){int count = 0;for (int i = 0; i < 2 * N; i++){for (int j = 0; j < 2 * N; j++){count++;}}for (int k = 0; k原创 2021-04-10 12:14:41 · 4097 阅读 · 0 评论 -
二分查找的时间复杂度
计算二分查找函数的时间复杂度,我们需要对代码进行分析:我们用二分查找法查找数据时,查找一次后可以筛去一半的数据,经过一次次的筛选,最后会使得待查数据只剩一个,那么我们查找的次数就是while循环执行的次数。因为数据个数为N,一次查找筛去一半的数据,即还剩N/2个数据,经过一次次的筛选,数据最后剩下1个,那么查找的次数可以理解为N除以若干个2,最后得1,那么while循环执行的次数就是N除以2的次数,我们只需计算N除以了多少次2最终等于1即可。在这里插入图片描述我们假设N除以了x个2,最终等于1,那么原创 2021-04-10 12:07:43 · 4684 阅读 · 0 评论 -
链表删除一个节点时间复杂度分析
时间复杂度:O(N),因为最好的情况是头指针就是该值,直接返回下一个节点,最坏的情况则是最后一个节点才是目标值,则需要一直遍历到尾部,因此平均时间复杂度是O(N)链表删除一个节点的案例分析,直接看有没有for循环,最好情况就是执行一次解决,最快情况就是最后一个节点才是你要删除的节点,此时循环n次。时间复杂度为O(n)...原创 2021-04-08 08:41:11 · 3288 阅读 · 0 评论 -
链表反转的思路不清晰,现在定下来了
/*本实验:自己写一个双向链表的添加,插入,删除一个节点*/#include <stdio.h>#include <stdlib.h>#define ERROR 1#define SUCCESS 0typedef struct _node{ int data; struct _node *next;}node; node *gpNode=NULL;/*本实验的链表是带头的的链表*/node* CreateNode(node *p){原创 2021-03-27 09:21:16 · 68 阅读 · 0 评论 -
遍历链表的思路
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head){ if (head == NULL) { return NULL; } struct ListNode* pre = hea原创 2021-03-22 22:03:04 · 71 阅读 · 0 评论 -
链表反转各种思路总结
1,栈,先进后出2,递归3,原创 2021-03-19 22:45:32 · 53 阅读 · 0 评论 -
xml在嵌入式中的应用
XML 解析原理:① 读取XML文档到内存;② 形成DOM树结构;③ 生成SimpleXML对象。读取解析成对象:原创 2020-10-01 11:43:42 · 810 阅读 · 0 评论 -
2020-09-27
什么是哈希函数???是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。Hash算法没有一个固定的公式,只要符合散列思想的算法都可以被称为是Hash算法。[2]什么是散列表???根据散列函数H(key)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。典型的散列函数都有无限定义域,比如任意长度的字节原创 2020-09-27 13:11:19 · 142 阅读 · 0 评论 -
at网络命令
网络服务命令AT+COPS操作员选择AT+CREG网络注册状态AT+CSQ信号质量报告AT+CPOL首选操作员名单AT+COPN读取操作员姓名AT+QNWINFO查询网络信息AT+QSPN显示注册网络的名称AT+QSPNAT+CTZU自动时区更新AT+CTZR时区报告AT+QLTS获取通过网络同步的最新时间...原创 2020-09-23 08:33:33 · 1074 阅读 · 0 评论 -
cops和copn
3 AT+CPOS设置功能:设置ME是自动选择运营商,还是使用该命令强制选择运营商.若所选运营商不可用,则不能再选择其他运营商,但=4 时例外.当=2 时,表明从该网络强制注销.注册模式会影响以后所有的注册行为.例如,当=2,ME未注册,直到=0或1时ME才注册AT+COPS=[[,[,]]],成功时返回OK,失败时返回:ERROR/+CME ERROR:,比如:+CPOL: 1,0,“CMCC”,可能错误有+CME ERROR: 30 ( 没有网络业务)+CME ERROR: 32 ( 网络不允许O原创 2020-09-23 00:10:58 · 804 阅读 · 0 评论 -
通信模组的操作系统运行过程
1,在模组中,一上电后,系统是在最高优先级任务中跑还是在空闲任务中跑,李永江说是在空闲任务中跑。2,操作系统中,任务的状态,等待态和挂起态的区别,休眠态的区别???原创 2020-09-22 10:13:50 · 282 阅读 · 0 评论 -
中断级的任务调度
1,首先,通讯板卡的驱动测试是在中断中置了一个标志位,然后,在uart 线程中判断这个标志位,没有标志位就一直死等这个标志位,有这个标志位就开始接收指令,接收到指令后给各个线程发消息。rtc ,sd 卡,usb 线程中具体做自己的测试程序。...原创 2020-09-22 09:54:44 · 459 阅读 · 0 评论 -
10月份的计划
1,nb 这一块找王成威的手下,丁丽军,何❌❌2,公司每年都会有绩效考核裁员3,5个月的时间是任务的完成情况4,试用期要表现自己。原创 2020-09-20 00:51:37 · 77 阅读 · 0 评论 -
操作系统之定时器
只有消息是最安全的,信号量,互斥锁,会引起资源竞争,原创 2020-09-18 07:34:05 · 119 阅读 · 0 评论 -
一个手机有几个cpu???
是一个芯片上有几个cpu还是只有一个cpu,然后一个cpu中是多核???一个智能手机有几个芯片,几个cpu,cpu和单片机的区别手机只有一个CPU,但是芯片就多了啊,首先手机有运存吧,一般这颗ic叫做SDRAM,然后64G内存,这个ic叫flash,这是最重要的3棵芯片,其他一些小芯片就不一一举例子了;然后咱们谈一下cpu和单片机的关系,那苹果A10的cpu举例,A10用的arm框架,arm你应该知道,其实就是一个比较高大上的单片机,所以你把手机的cpu叫单片机其实也是没有错的...原创 2020-09-12 12:51:52 · 1637 阅读 · 0 评论 -
多进程之异步和并发,并行
并发:当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)。并行:当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。区别:并发和并行是即相似又有区别的两个原创 2020-09-12 12:15:37 · 416 阅读 · 0 评论 -
c语言编程能力提高
函数的参数就是返回值,返回值只是其中一个返回值原创 2020-08-26 09:32:26 · 194 阅读 · 0 评论 -
ipc是什么
IPC(Inter-Process Communication)进程间通信,原创 2020-08-25 07:51:16 · 295 阅读 · 0 评论 -
gperf生成的c语言文件讲解
gperf使用:主要是declarations和keyword部分,如果只是单纯的查找字符串是否存在,则不需要declarations部分,.gperf文件中直接保存哈希表中的所有字符串即可。但是哈希表中一般都是key和value对,这样的要在declaration部分声明一个struct,然后两个%%后是keyword。格式如下: struct KeyValue{ const char * key;//第一个字段必须是const char * int value; //可以有更多原创 2020-08-23 12:33:47 · 253 阅读 · 0 评论