自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

转载 48个国际音标

48个国标音标:元音:1、单元音:[i:]、、[ɔ:]、[ɔ]、[u:]、、[ə:]、[ə]、[ɑ:]、[ʌ]、[e]、[æ]2、双元音:[ei]、[ai]、[ɔi]、[iə]、[ɛə]、[uə]、[au]、[əu]辅音:[p]、、[t]、[d]、[k]、[g]、[f]、[v]、[s]、[z]、[θ]、[ð]、[ʃ]、[ʒ]、[tʃ]、[dʒ][tr]、[dr]、[ts]、[dz]、[m]、[n]、[ŋ]、[h]、[l]、[r]、[j]、[w]英语音标表发音规律记忆口诀:.

2020-07-09 19:22:50 3028

原创 STM32F4烧录方法

https://blog.csdn.net/qq_24835087/article/details/83751498点击 j-Flash lite批处理烧录方式:1.将jink驱动目录中的JLink.exe 和JLinkARM.exe文件复制到 新建的一键下载文件中2. 新建jlinkBrunFwFile.txt,内容如下:device nRF52832...

2019-08-16 15:49:17 7783

原创 J-Link遇到的问题总结

1.在使用的过程中,J-Link 指示灯一直闪烁,keil 识别不了J-Link,J-Link驱动安装失败 解决方式:重启电脑 具体原因未知2.J-Link被识别了,但是不能使用keil 进行下载 出现如下错误:1)可以先找 KEIL 的安装路径:C:\Keil_v5\ARM\Segger2)再找到你的J-Link安装路径:C:\Program Files (x8...

2019-07-12 15:50:59 8612

原创 FreeRtos 任务优先级和中断优先级

中断优先级和任务优先级的区别: 1.简单的说,这两者之间没有任何关系,不管中断的优先级是多少,中断的优先级永远高任何任务的优先级,即在执行的过程中,中断来了就开始执行中断服务程序, 2.对应STM32F103 F407来说,中断优先级数值越小,优先级就越高,而FreeRTOS的任务优先级是,任务优先级数值越小任务优先级越低。任务优先级配置 ...

2019-07-01 17:36:19 14436

转载 Nordic nRF5 SDK和softdevice 介绍和版本对应 11

https://www.cnblogs.com/iini/p/9095551.htmlSDK和Softdevice 的区别,怎么选择SDK和Softdevice版本及版本兼容问题Nordic目前有2套完全独立的SDK:nRF SDK和nRF Connect SDK,一般来说,开发板nRF51/52推荐使用nRF5 SDK,开发nRF91/nRF53等新产品推荐使用nRF connect S...

2019-06-24 17:05:51 4536

转载 BLE service, characteristic以及CCCD概念 9

来自:https://www.cnblogs.com/iini/p/9095622.html客户端(client):手机使用设备提供服务,因此手机就是client服务端(server):以数据为载体,提供各种有价值的数据,比如蓝牙体温计上图的Request和Reponse其实就是我们经常说的ATT命令(ATT PDU),Client和Server之间就是通过ATT PDU进行交...

2019-06-20 19:05:01 20978 3

原创 Nodic 52832 擦除Flash 及Flash空间分配 2

点击jlink 中的J-Flash Lite 对整个芯片进行操作以上对整个芯片进行擦除操作应用程序Flash 地址分析:52832_AA总的Flash空间为512K, RA为64k,协议栈占用的空间 Rom大小为152k,Ram大小10k,应用程序Rom开始地址0x26000(152k), 大小0x5A000(360k),RAM开始地址0x2B90(10k),大小0xD4...

2019-06-11 15:32:30 2081

原创 c#上位机开发3

从.NET Framework 2.0开始,C#提供了SerialPort类用于实现串口控制。命名空间:System.IO.Ports。其中详细成员介绍参看MSDN文档。下面介绍其常用的字段、方法和事件。  1. 常用字段:名称 说明 PortName 获取或设置通信端口 BaudRate 获取或设置串行波特率 DataBits 获取或设置每个字节的标准...

2018-10-10 10:27:39 2992 1

转载 c#上位机开发2

上一篇简单介绍了C#的一些基本知识,并成功的Hello,World,那么从这篇开始,我们来自己动手写一个串口助手:1、构思功能  串口助手在单片机开发中经常被用来调试,最基本的功能就是接收功能和发送功能,其次,串口在打开前需要进行一些设置:串口列表选择、波特率、数据位、校验位、停止位,这样就有了一个基本的雏形;然后我们在下一篇中在此功能上添加:ASCII/HEX显示,发送,发送新行功能,重...

2018-10-10 10:07:45 3347 2

转载 c#上位机开发1

本文来自https://www.cnblogs.com/Mculover666/p/9126191.html1、新建C#项目工程   首先选择新建Windows窗体应用(.NET Framework),然后选择项目保存位置,填写项目名称,这里因为我们不需要用git进行版本管理,所以不用新建GIT存储库;   框架是指.net框架,4以及4以下的.NET框架可以在xp上运行,4以上可以在...

2018-10-08 11:32:36 15972 1

原创 Push-Pull推挽输出和Open-Drain开漏输出

【Push-Pull推挽输出】原理:输出的器件是指输出脚内部集成有一对互补的MOSFET,当Q1导通、Q2截止时输出高电平;而当Q1截止导通、Q2导通时输出低电平。Push-Pull输出,实际上内部是用了两个晶体管(transistor),此处分别称为Top-Transistor和Bottom-Transistor。通过开关对应的晶体管,输出对应的电平。Top-Transistor

2017-02-27 14:35:46 2640

原创 stm32NVIC中断优先管理

这里简单介绍一下STM32的中断分组:STM32 将中断分为5个组,组为0~4,该分组的设置是由SCB->AIRCR寄存器的bit10~8,来定义的,具体分配关系表如下: 第0组 :所有4位用于指定响应优先级第1组:最高1位用于指定抢占优先级,最低3位用于指定响应优先级第2组:最高2位用于指定抢占优先级,最低两位用于指定响应优先级第3组:最高3位用于指定抢占优先级,最低1位

2017-01-17 14:42:32 1742

原创 stm32 boot0 boot1的启动方式

STM32 三种启动模式对应的存储介质君是芯片内置的,它们是: 1.用户闪存 =芯片内置的Flash  2.SRAM=芯片内置的RAM区,就是内存了。 3.系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段bootloader,就是同事的ISP升级程序,这个   区域的内容在芯片出现后没偶人能够修改或拆除,即它是一个ROM;在每个STM32 的芯片上都有两个管脚

2017-01-14 16:54:16 23759 5

原创 static 全局变量 全局变量 静态局部变量 局部变量 静态函数 普通函数 之间的区别

全局变量本身就是静态存储方式,静态全局变量也是静态存储方式,全部变量的作用域是整个源程序,static 全局变量指限定了定义该变量的源文件内有效在同一原程序的其它源文件不能使用它, static全局变量只初始化一次,防止在其它文件单元被引用;    把局部变量改变为静态局部变量后是改变了它的存储方式即改变了它的生存期,局部变量在栈中,static局部变量在静态存储区,静态局部变量只

2017-01-14 11:04:41 484

原创 结构体大小sizeof的理解

在32位编译环境中 sizeof的用法  sizeof(char)     1  sizeof (int)              4  sizeof(unsigned int)  4   sizeof(long int)          4    sizeof(short int)        2   sizeof(float)

2017-01-14 10:31:12 5487

原创 回调函数的作用

1.回调函数是一个很有用,也很重要的概念,当发生某种事件时,系统或其他函数将会自动调用你定义的一段函数     2.回调函数就相当于一个中断处理函数,由系统在符合你设定的条件是自动调用,为此,你需要做三件事,1.声明,2.定义 3.设置触发条件,就是在你的函数中把你的回电话名转化为地址作为一个参数,便于系统调用,   3.所谓回调函数就是按照一定的形式由你定义并编写实现内容,当发生某种

2017-01-13 16:53:07 2083

原创 CPU大小端

大端模式:是指数据的低位保存在内存的高地址,而数据的高位,保存在内存的地址中,小端模式:是指数据的低位保存在内存低地址中,而数据的高位保存在内存的高地址中,          为什么会有大小端之分,我们是以字节为单位,每个地址单元都对着一个字节,一个字节为8bit,但是在C语言中除了8bit char之外,还有16short型,对于大多数打印8位处理器,例如16或32位处理器,由于处理

2017-01-13 14:42:22 2733

原创 二级指针动态内存分配

指针是可变数组的首地址,正因为是可变数组,所以一般使用指针都是采用动态内存分配和释放的方式。一尾指针形式简单,容易理解,平时应用较多二维数组和二维指针比较复杂,并且在动态内存分配与释放方面比较复杂难以理解,但是二维数组和二维指针是非常有用的void func1(int**p1,int **p2){    int **temp;    int *temp1;    int i

2017-01-13 12:39:59 6781

原创 ucos内存管理

为了消除碎片,ucosii连续的打开内存按分区来管理,每个分区包含有整数个大小相同的内存块类似每个人物对应一个人物块,每个时间对应一个事件块,ucosii每个内存块也是对应一个内存块,内存控制块是一个暑假结构typedef struct{   void *OSMemAddr;   void *OSMemFreeList;   INT32U OSMemBlkSize;   I

2017-01-12 17:16:00 1186

原创 C语言内存分配

1.C语言内存分为四个区栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数指向完后编译器自动释放。堆:用来存放动态分配函数(如malloc)分配的空间,是由程序员自己手动分配,并且必须由程序使用free释放,如果忘记用free释放,会导致分配的空间一直站着不放,导致内存泄露,堆 顺序随意,栈 后进先出全局区(静态区):用来存放全局变量和静态变量,存在于程序的整个运行

2017-01-11 17:39:23 453

原创 数组指针和指针数组的区别

数组指针(也称行指针)定义 int(*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长,也就是说执行p+1,p要跨过n个整型数据的长度。如果将二维数组赋给指针,应该这样赋值: int a[3][4];int (*p)[4];  //该语句是定义一个数组指针,指向包含4个元素的一维数组。p=a;  //将该

2017-01-11 14:58:47 263

原创 ucos 改变任务的优先级

在Ucos里,任务优先级是可以改变的,可以修改任务优先级的一个好处就是可以解决优先级反转问题,什么是优先级反转问题,即当一个高优先级任务通过信函量计征访问共享资源是,该信号量被一低优先级任务占用,而这个低优先级任务在访问共享资源是可能又被其它一些中等优先级抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。在访问共享资源时,恰当地修改任务的优先级就可以解决优先级

2017-01-11 09:31:52 2997

原创 ucos 删除任务

有了前面的经历之后,在ucosii里,创建一个任务之后,可以对任务执行以下几种操作1.删除任务  OSTaskDel()2.挂起任务  OSTaskSuspend()3.恢复任务 OSTaskResume()4.改变任务的优先级OSTaskChangePrio()5.提取任务信息OSTaskQuery()今天我们学习一下删除任务,删除任务是说任务将返回并处以休眠状态,任务的

2017-01-10 17:03:08 1107 1

原创 ucos恢复任务

一个任务被挂起之后,想要再次被执行,是需要恢复,恢复任务需调用OSTaskResume()函数实现,想OSTaskSuspend()一样,调用OSTaskResume()需要一个参数,就是优先级,如果OSTaskResume(5)就是恢复优先级5的任务INT8U OSTaskResume(INT8U prio){    OS_TCB *ptcb;   if(prio>=OS

2017-01-10 16:06:10 573

原创 ucos任务挂起

创建好了任务之后,就已经初步跨进了ucosii的编程了,随着进一步的编程,发现学会创建了任务还是不够的,创建任务1用于串口1发送数据,任务2用于串口1接收数据,程序本身的意图是发送完数据后,接着就串口1接收反馈回来的信息,但是不能正常通信,原因就是当任务1在发送数据过程CPU时不是会跑到任务2去接收数据,这样就会接收自己的发送的数据,在任务1执行的时候,任务2不执行,当任务1执行完,任务2

2017-01-10 15:41:06 1513

原创 ucos 任务创建

任务是什么?有一句话,CPU不同的时刻总是在执行着优先级最高的任务,所以CPU总是在不同的任务间切换,任务好比linux中近程在ucos世界里,任务就是一个大箩筐,框中一个或多个函数,CPU像个美女,总是从一个大箩筐跳到一个大箩筐,CPU这么跳来跳去都是找大帅哥我们知道,CPU总是不断在各个任务间切换,为了下次跳回来,CPU在跳的同时,要保护好现场,这时我们需要用的堆栈了,所以每当我们

2017-01-10 14:26:08 2654

原创 ucos全局变量

任务创建之后,只是完成系统编程的一小部分,更为重要的是任务键的通信,在ucos里任务通信可以采用以下几种方式1.共享全局变量,这是最快捷有效的方式,实现这种通信可以采用以下两种方式,一是利用宏OS_ENTER_CRITICAL和OS_EXIT_CRITICAL来关中断和打开中断,二是利用函数OSSchedLock和OSSchedUnLock对UCOS的任务调度上锁和开锁2. 使用信号量

2017-01-10 11:05:10 1198

原创 ucos事件控制块

信号 邮箱 消息队列都是需要先创建才能使用的,创建以上三者需要用到事件控制块这东西什么是是事件控制块呢 可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储关于这个任务重要消息,那么事件控制块就好比任务里的任务控制块,它存储这个事件重要消息,我们说,创建一个事件,其本质的过程就是初始化这个事件控制块,一个任务或中断服务子程序可以通过事件控

2017-01-10 10:31:58 1127

原创 ucos初始化及启动

ucosii 里,在创建一个任务(或者调用其它系统服务之前),是需要先初始化系统的,初始化ucosii需要调用函数OSInit();调用函数OSInit的作用是什么,主要实现以下几个功能。1.建立空闲任务级统计任务。2.初始化ucosii变量及数据结构,其中包括信号量,邮箱,消息队列等初始化等。   多任务的启动时用户通过调用OSStart()实现的,然后,启动ucosii之前,用

2017-01-09 17:54:31 1376

原创 ucos时钟节拍

ucosii里 ,时钟节拍就好比是人的心脏一样重要,它对于CPU能顺利在各个任务之间切换有着至关重要的作用使用时钟源有一个特别需要注意的地方:用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用OSStart之后,ucos中时钟节拍服务是通过定时器中断服务子程序中调用OSTimeTick()实现的void OSTimeTick(void){   OS_TCB *ptcb;

2017-01-09 17:40:02 1894

原创 ucos 任务延时函数

在ucos里,系统也提供了这样的延时函数,一个是大众版本OSTimeDly(),一个是精致版本的OSTimeDlyHMSM(),随你怎么选择这两者的区别就是,OSTimeDly的延时时间是以节拍数来衡量的额,OSTimeDlyHMSM的延迟时间则使以具体时间大小来很亮的。这两个函数有着非常重要的作用,就是当你调用这两个函数的时候,ucos会进行一次任务调度,所以CPU能在各任务间进

2017-01-09 15:41:17 6887

原创 ucos任务调度

实现任务切换,需要调用函数OSSched()void OSSched(void){     INT8U y;     OS_ENTER_CRITICAL();      if(OSLockNesting|OSIntNesting==0)            (1)      {y=OSUnMapTbl[OSRdyGrp];               OSPrio

2017-01-09 15:05:45 484

原创 ucos任务状态及任务控制块

一个任务被创建后,可以处于以下五种状态之一这五种状态分别是:1.睡眠状态    2.就绪状态      3.等待状态     4中断服务状态    5执行状态下面简单介绍各状态的含义即各状态的切换方法          睡眠状态:睡眠态指任务驻留在程序空间之中,还没有交给ucos管理,把任务交给ucosii是通过调用两个函数之一OSTaskCreate或OSTaskCr

2017-01-09 14:30:48 4893

原创 ucos消息队列

如果把邮箱比作信号量的升级版,那消息队列就是邮箱的升级版,邮箱可以实现从一个任务向另一个任务发送一个指针变量,消息队列则可以实现从一个任务向另一个任务发送多个指针变量,而且每个指针指向的数据结构变量也可以有不同。   使用消息队列需要注意的恩地方是:一个任务或者中断服务子程序可以调用OSQPost(),OSQPostFront(),OSQFlush(),或者OSQAccept函数,但是只有

2017-01-07 16:09:59 1805

原创 C语言队列的理解

队列是一种特殊的线性表,特殊之处在与允许在表的前端(front)进行删除操作,而在表ide后端进行插入操作,和栈一样,队列时一种操作受限制的线性表,进行插入操作的端称为队尾,进行删除操作的端称为队头。  队列的数据元素称为队列元素,在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队,因为队列只允许在一段插入,一端删除,所以只有最早进入队列的元素才能从队列中删除,故队列由

2017-01-06 17:03:39 5358 3

原创 ucos通信邮箱的理解

学习过信号量之后再来看邮箱,发现他们是非常相似的,甚至有时候邮箱可以当做信号量来使用,邮箱相对信号量而言,只是多传递一个指针变量和信号量相似,ucos提供了5个对邮箱操作的函数它们是:1.建立一个邮箱,OSMboxCreate()2.等待一个邮箱的消息  OSMboxPend()3.发送一个消息到邮箱,OSMboxPost()4.无等待从邮箱中得到一个消息,OSMboxAcce

2017-01-05 15:44:46 5820

原创 ucos 信号量的理解3

简单地说:   当信号量=0时,表示信号量代表的资源不可用,操作系统调用OSSemPend函数的任务加入该信号量的等待任务列表中,  当信号量>0时,表示信号量代表的资源可用,OSSemPend函数返回,任务可用使用资源,一般地,信号量的最大值表示资源的最大同时共享数,nmax=1;表示资源最多只能由i该任务使用,为了保证该单元不被其它任务修改,就使用nmax=1的信号量,nmax>1

2016-12-30 16:53:53 805

原创 ucos信号量的理解2

ucos 对信号量的支持由os_sem.c  os_core.c支持,其中os_core.c提供OS_EVENT 数据结构的一些基本操作,os_sem.c则实现具体的信号量,信号量实现的分析,主要数据结构问题。1.OS_EVENT结构的实现分析typedef struct{INT8U OSEventType  //事件控制块的类型INT8U OSEventGrp   //等待的任务

2016-12-30 14:11:01 582

原创 链表的各类操作详解

链表是一种常见的重要的数据结构,它是动态地进行存储分配的一种结构,它可以根据需要开辟内存单元,链表有一个头指针变量,以head表示,它存放一个地址,该地址指向一个元素,链表中每一个元素称为结点,每个结点都应该包括两部分:一为用户需要的实际数据,二为下一个结点的地址,因此head指向第一个元素,第一个元素又指向第二个......知道最后一个,该元素不再指向其它元素,它称之为表尾,它的地址

2016-12-29 17:33:23 1227

原创 ucos信号量理解1

本文主要来自:http://blog.csdn.net/sinat_34550830/article/details/52911396    ucos中提供了好几个用于同步事件以及共享资源访问的机制,目前我看明白的有信号量,互斥信号量,事件标志组。下面谈谈自己对他们的理解:1.互斥信号量:互斥互斥,意思就是我用了你就不能用,你用了我就不能用。永远都只有一个人独占这个东西

2016-12-29 16:37:45 417

空空如也

空空如也

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

TA关注的人

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