- 博客(32)
- 资源 (18)
- 收藏
- 关注
原创 单片机增量升级 打包软件及接口介绍
本软件界面使用QT编写,相关生成补丁,压缩以及解压和打补丁均由C代码实现。生成补丁算法基于bsdiff算法,压缩基于LZ77算法。适合于rom较小的单片机使用。介绍 由于在接触NB-IOT项目时发现目前使用的一般都是全量升级方式,但是NB往往网速慢,所以全量升级花费时间较长。同时对增量升级原理比较感兴趣,故自己制作了一个简单的增量升级打包软件,原则上可用于NB等网速慢的升级(由于实现整个可移植增量升级比较麻烦,便没搞单片机上bootloader相关部分代码,并且这个软件以及打补丁代码仅在电脑上模拟过
2020-07-26 15:45:59
1448
13
原创 github下载慢的解决方法
由于github为国外服务服务器,从而导致下载过慢,对于github上的源码我们可以采用先fork到gitee的自己仓库上,这个速度比较快,然后再从gitee上git clone到自己的电脑上。gitee为锅内服务器,下载速度飞起。...
2020-04-03 08:47:30
388
原创 全志A64 U-BOOT起始串口初始化流程详解
串口执行流程,首先是/common/board_f.c中先调用void board_init_f(ulong boot_flags)该函数是汇编代码进入C代码前在_main中调用的地址重定向前的设备初始化函数,其中调用initcall_run_list(init_sequence_f)来执行init_sequence_f数组中的相关初始化函数,该数组的定义也在本文件中,其定义如下s...
2019-11-16 11:51:17
2028
原创 UBUNTU固定IP的方法
首先利用ifconfig查看网卡名称,如下图然后修改/etc/network/interfaces,如下图所示:auto后为网卡名称框内表示使用静态IP,若使用动态,则该为dhcp最下面三行表示IP地址,子网掩码以及网关。然后进入/etc/resolv.conf设置DNS如下图然后重启网络如下图:...
2019-11-07 09:22:52
395
原创 STM32初始化SD卡流程
1,初始化SDIO外设,关闭SDIO时钟。2,上电,开启时钟。3,延时最低74个时钟周期。使时钟与SD卡稳定,否则会出错。4,发送CMD0,需要返回0x01,进入Idle状态5,为了区别SD卡是2.0还是1.0,或是MMC卡,这里根据协议向上兼容的原理,首先发送只有SD2.0才有的命令CMD8,如果CMD8返回无错误,则初步判断为2.0卡,进一步发送命令循环发送CMD55+ACMD41,直...
2019-10-28 14:40:02
2511
1
原创 FREERTOS+TCP/IP学习笔记,相关术语及概念简介
Ethernet Network:数据通过以太网帧的本地以太网网络传送Ethernet Address:以太网帧通过网络将数据从一个节点移动到另一个节点,以太网帧的数据或许只是原始数据,但一般情况下会与其他协议例如可能进一步携带TCP或UDP的IP协议相关联,在同一个以太网络中,不同的节点通过MAC地址来识别,MAC地址通常写为6个由冒号分开的8位字节。在本地以太网中,每一个节点只有一个唯一MA...
2019-10-25 09:52:24
3124
原创 关于USB转串口问题
使用USB转串口会导致串口只能进行半双工通信,若在电脑向下位机发送数据时,下位机UART向USB转串口线发送数据会导致最后上位机接收到的数据出现错误。...
2019-10-24 09:30:02
954
原创 FREERTOS学习笔记,初始化第一个任务相关
注意:LR与R14表同一个寄存器。FREERTOS任务切换过程系统在进入中断前会先依次把xPSR, PC, LR, R12以及R3‐R0由硬件自动压入适当的堆栈中,之后在进入中断函数执行响应中断内容。当中断执行完后再将上述入栈数据依次出栈。关于上述寄存器:xPSR:状态字寄存器。PC:表被打断前任务指令即将执行指令的的地址,用于返回原来地址继续执行。LR:表示本次任务执行完退出后该执行...
2019-10-21 14:53:45
1389
原创 FREERTOS移植问题
在keil上往stm32f407zgt6上移植时,FreeRTISConfig.h文件中初始定义中把#ifdef(ICCARM) 改为#if defined(ICCARM)||defined(__CC_ARM)||defined(GUNC)在stack_macros.h中添加#include "portmacro.h"否则会导致栈溢出回调函数无法使用,因为无法找到portSTACK_GROWTH...
2019-10-19 17:40:05
420
原创 FREERTOS学习笔记,任务切换
FREERTOS采用滴答定时器周期性产生中断来作为心跳,作为任务切换周期,其中断处理函数如下:extern void xPortSysTickHandler(void);void SysTick_Handler(void){ /* USER CODE BEGIN SysTick_IRQn 0 */ if(xTaskGetSchedulerState()!=taskSCHEDULER...
2019-10-19 16:18:13
1508
原创 FREERTOS学习笔记,开发者支持
configASSERT()在C函数中有assert()来判断括号内表达式是否正确,若不正确则永远卡死在该函数,FREERTOS系统里,我们为了方便调试,可以定义一个类似于assert()功能的宏configASSERT()来判断问题出在哪里,当然这会导致代码量增大,且花费更多时间,故在调试完成后尽量关闭该功能。下面提供了一个可选的configASSERT()的实现方法:/* This fu...
2019-10-15 15:16:50
613
原创 FREERTOS学习笔记,任务通知
简介在之前的应用中我们通过一系列独立的任务来使用FREERTOS。但有时我们也需要任务之间相互交流。通过中间项目交流之前章节我们都是通过中间相来进行交流。例如信号量,队列等,中断或任务先将信号量或数据放入队列,然后等待其他任务的使用。任务通知(直接交流)任务通知,使得任务间可以直接交流,或使任务与中断同步。通过任务通知,中断或任务可直接将事件传递给需要的任务。任务通知功能是可选功能,若...
2019-10-15 10:18:03
316
原创 FREERTOS学习笔记,事件组
简介之前我们讲过实时嵌入式系统需要对事件进行响应,之前的章节我们讲述了将事件处理放置到任务中,任务通过信号量或队列的方式等待执行,它们的主要特征为:1,他们允许任务进入阻塞态等待事件的发生2,当事件发生时,他们使一个任务进入就绪态,该任务是所有等待任务中优先级最高的任务。事件组是另一种将事件传递给任务的方式,与通过信号量与队列传递的方式不同,他们主要特征为:1,事件组允许任务进入阻塞态等...
2019-10-14 15:37:28
1111
原创 FREERTOS学习笔记,资源管理二
互斥体与任务调度当两个需要使用同一个共享资源的任务优先级不同时,高优先级会在低优先级任务刚释放互斥体时打断低优先级任务。但当两个任务优先级相同时,任务二不会在任务一刚释放互斥体时马上抢占,而会等待任务一时间片执行完后再执行,此时会产生如下一种情况,即当任务二释放互斥体后的时间片执行完前又开始了第二次循环,从而再次获取互斥体,此时会导致切换到任务一后,任务一无法得到互斥体而再次进入阻塞,从而任...
2019-10-14 13:36:00
517
原创 FREERTOS学习笔记,资源管理一
介绍在多任务系统中,若一个任务获取了资源后,在其退出运行状态时并没有释放掉该资源,即使得资源前后状态不一致,则当其他任务或中断调用该资源时会导致数据损坏或其他问题。实例:当两个任务试图向LCD屏写东西时。1,任务A开始执行并向LCD写“HELLO WORLD”,2,任务A在输出“HELLO W”时忽然被优先级更高的任务B打断。3,任务B向LCD屏写入 “Abort, Retry, Fa...
2019-10-12 17:48:02
579
原创 FREERTOS学习笔记,中断管理三
中断服务函数中使用队列二进制以及计数信号量用于传递时间,队列用于传递事件以及数据,相关函数:xQueueSendToFrontFromISR()该函数相当于任务中的xQueueSendToFront()的中断调用安全版。xQueueSendToBackFromISR()该函数相当于任务中的xQueueSendToBack()的中断调用安全版。xQueueReceiveFromISR()...
2019-10-11 17:09:57
1531
原创 FREERTOS学习笔记,中断管理二
计数信号量二进制信号量相当于一个最多含有一个数据的队列,则计数信号量相当于可以含有多个数据的队列。任务对队列中的数据并不感兴趣,它们只关注队列中数据的个数。当FreeRTOSConfig.h中的configUSE_COUNTING_SEMAPHORES置为1时计数信号量才有效。计数信号量主要用于两种情况:1,计数事件,当有事件来临时就将一个信号量放入队列,从而根据队列中信号量个数来了解事件数...
2019-10-11 16:08:06
506
原创 FREERTOS学习笔记,中断管理一
中断与任务这里中断指的是硬件中断,优先级最低的硬件中断都会抢占优先级最高的任务进程。所以硬件中断的中断函数应尽可能地短,否则会影响任务进程。中断专用应用接口函数(API)在FREERTOS中,由于任务中调用的API接口函数许多时候需要进入阻塞状态,而硬件中断处理函数应尽可能短,故任务中调用的API函数不适用于硬件中断。故,在FREERTOS中采用了将二者的API接口函数分开的方式,任务中不可...
2019-10-11 11:47:48
902
原创 FREERTOS学习笔记,软件定时器管理
绪论软件定时器用于以后的固定时间,或以一个固定频率周期运行的函数。通过软件定时器执行的函数称为软件定时器的回调函数。软件定时器通过FREERTOS内核实施与控制,它并不需要硬件支持,与底层硬件定时器无关。软件定时器函数是可选的,使用软件定时器需要以下操作:1,编译源文件中的FreeRTOS/Source/timers.c 。2,将FreeRTOSConfig.h中的 configUSE_T...
2019-10-09 17:03:41
1241
原创 FREERTOS学习笔记,队列管理二
从多个来源接收数据在FREERTOS操作系统中,任务从多个数据源获取数据是一件很常见的事,但是,任务在处理数据时需要知道数据来自于哪里,这样才能决定如何处理该数据。为了解决这个问题,一个简单的方法是通过创建一个包含数据来源与数据本身的结构体,将该结构体存到队列中,则读任务即可知道数据的来源,其原理框图如下所示:其代码示例如下/* Define an enumerated type used...
2019-10-08 17:01:02
433
原创 FREERTOS学习笔记,队列管理一
数据存储队列可以存储有限大小,且数据类型固定的数据。队列所能存储的最大数据量称为队列的长度。队列的长度与队列里元素的大小在队列创建时就已固定。队列经常别用作为先进先出存储。实现队列的功能可通过两种方法。通过复制的方法:将要进入队列的数据复制到队列中。通过指针的方式:将需要进入队列的数据的指针放到队列中。FREERTOS采用复制的方式进行队列数据的存储。任务的入口队列可以被知道队列存在...
2019-09-30 15:43:52
346
原创 FREERTOS学习笔记,任务管理四
不带时间片的抢占调度上次我们已经讲过了带时间片的抢占调度算法,它的主要特征是只要有高优先级的到来,即使该时间片没有用完,高优先级任务依旧会抢占低优先级的处理器,就如单片机中的中断抢占资源类似,只要又中断来,会马上切换到中断函数执行,当两个优先级相同任务来时,会按时间片依次执行任务。此次我们主要介绍不带时间片的抢占调度。当有不同优先级任务时,调度算法依旧如之前带时间片的的类似,优先执行高优先级任...
2019-09-30 09:04:51
634
原创 FREERTOS学习笔记,任务管理三
空闲任务当所有任务进入阻塞状态时,此时处理器处于空闲状态,然而FREERTOS规定必须至少有一个任务处于运行状态,为了保证这种状态,调度器会自动创建一个空闲任务,当所有任务处于阻塞状态时就会自动产生一个空闲任务来执行,空闲任务具有最小优先级(设为0),为了防止空闲任务阻止其他任务的执行。注意:如果一个应用使用了vTaskDelete()来销毁一个任务,此时空闲任务并不会被其他任务饿死,因为当销...
2019-09-29 17:48:01
319
原创 FREERTOS学习笔记,任务管理二
任务优先级接上一章:xTaskCreate()参数中uxPriority表明了任务在创建时的起始优先级,当任务创建后用户可以使用vTaskPrioritySet()来更改任务优先级。有效优先级的最大数通过FreeRTOSConfig.h中的configMAX_PRIORITIES来定义,数字越大代表优先级越高,并且可以多个任务具有相同优先级。FREERTOS时间任务调度器主要通过两种方法决...
2019-09-29 11:42:09
371
原创 FREERTOS学习笔记,任务管理一
任务函数任务作为一个C函数进行执行,唯一特别之处在于其返回的类型,以及输入参数的类型都为void型,其标准格式如下所示:void ATaskFunction( void *pvParameters );任何一个任务都是一个独立的程序,将会在一个无限循环中一直执行,或并不会返回。FREESTROS中的任务函数一定不能含有return,并且不能执行到退出函数,当一个任务再也不使用时应被明确的...
2019-09-27 17:24:13
210
原创 FREERTOS笔记,堆栈相关函数
1,size_t xPortGetFreeHeapSize( void );用于返回堆栈中剩余空间(bytes)的大小,可用于节省内存空间,例如:当所有任务都已创建后,执行该函数返回的大小为2000,则下次定义configTOTAL_HEAP_SIZE的值可以减小2000。该函数在heap_3的情况下无效2,size_t xPortGetMinimumEverFreeHeapSize( vo...
2019-09-27 15:48:59
2286
原创 FREERTOS学习笔记,内存管理与变量、函数命名规则
1,数据类型TickType_t:FREEROTS设有一个类似于滴答定时器的周期性中断,通过计数中断的次数用来定义时间长度,中断个数定义为TickType_t,如果configUSE_16_BIT_TICKS被设置为1,则TickType_t即为十六位数,配置成0则它为32位数,对于8位16位单片机,其一般设置成1,32位单片机设为0。BaseType_t:用于表示单片机数据类型,当单片机为3...
2019-09-27 15:28:13
677
原创 USB复合设备
USB组合设备:具有多个接口的设备,每个接口代表一个独立的设备USB复合设备,表示几个设备通过一个USB Hub形成的单一设备,即在电脑上他只显示为一个设备。注意USB VID与PID决定了怎么检查设备描述符,并装多少个驱动程序,若VIDPID不对则装的驱动个数可能与接口数不一致。正常情况下,多个接口即对应多个设备,但要注意所有接口描述符备用接口一定要设成0,否则电脑驱动无法识别该接口。可通...
2019-09-27 09:15:13
5228
2
原创 USB详解
https://wenku.baidu.com/view/d9a5b9c06137ee06eff918b5.html USB详解https://blog.youkuaiyun.com/zouli415/article/details/79862672 各种配置描述符详解https://blog.youkuaiyun.com/zuosifengli/article/details/9164717 CCID描述...
2019-09-27 09:12:29
740
1
原创 UART接收不定长数据块(队列缓存数据块)
1,DMA,UART配置:2,代码配置所用全局变量类型:typedef struct QUE{ uint8_t res_data[100]; uint8_t FLAG; uint8_t res_counter; struct QUE *next;}QUE_UE_RES;QUE_UE_RES QUE_buff[QUE_LEN];QUE_UE_RES *UART_buff,*...
2019-09-26 09:06:21
792
原创 stm32l052低功耗配置
#执行步骤:在执行之前必做:__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);清除唤醒标志位。HAL_PWREx_EnableUltraLowPower();HAL_PWREx_EnableFastWakeUp();使能低功耗,使能快速唤醒SysTick->CTRL = 0;关闭滴答定时器之后通过HAL_PWR_EnterSTOPMode(PWR_LOW...
2019-09-26 08:50:37
1677
原创 MSP430FW428时钟树原理
MSP430FW428时钟树原理1,2,4相当于锁相环,通过晶振产生的精准ACLK时钟来作为校准输入,DC Generator与DCO组成振荡器,来产生不精确的频率f(DCO),然后经过(4),再经过 /(N+1)后分频为fDCO的1/(D*(N+1))后输入1,经过多次循环即可使得锁相环路基准频率输入与多次分频后输入频率几乎相等,然后即可输出精准震荡频率fDCO,其值为ACLK的D*(N+1...
2019-09-19 09:47:47
445
pdf_reference_1-7.rar
2020-03-20
portplayer编解码插件
2020-02-25
Keil.STM32L1xx_DFP.1.2.0.rar
2020-01-15
Keil.STM32L0xx_DFP.2.0.1.rar
2020-01-15
Keil.STM32F7xx_DFP.2.12.0.rar
2020-01-15
Keil.STM32F4xx_DFP.1.0.8.rar
2020-01-15
Keil.STM32F1xx_DFP.1.0.5.rar
2020-01-15
jdk-13.0.1_windows-x64_bin.rar
2020-01-15
文件系统代码
2019-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人