自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【无标题】

eth init

2022-08-18 15:34:54 177 1

原创 typedef int()(int,int)

typedef int()(int,int)

2022-07-08 22:02:24 719

原创 keil取消结构体成员的自动对齐

取消结构体的自动对齐weixin_30588675 2015-04-11 19:20:00 644 收藏 1文章标签: c#版权使用 attribute((packed))例如struct TEST {  short x;int y;}attribute((packed));此时sizeof(TEST)等于6,可见此时不是自动对齐...

2021-12-01 19:50:12 521

原创 SMBUS

2021-05-31 11:18:02 167

原创 tcp_listen_input函数里的发送

tcp_listen_input函数里的发送1.tcp_input 里调用tcp_listen_input2.tcp_listen_input(struct tcp_pcb_listen *pcb){、、、、、、、最后有一句return tcp_output(npcb);}3.tcp_output/**Find out what we can send and send it@param pcb Protocol control block for the TCP connecti

2021-05-27 23:02:05 286

原创 LWIP接收调用过程

最先跳转的是硬件中断ETH_IRQHandler。以下是逐级跳转过程:1.ETH_IRQHandler里调用lwip_pkt_handle();2..lwip_pkt_handle里面调用ethernetif_input(&lwip_netif);3.ethernetif_input(&lwip_netif);里面执行netif结构体类型变量lwip_netif的成员函数input();err=netif->input(p, net...

2021-05-19 22:34:51 3116

转载 TCP的三次握手与四次挥手理解及面试题(很全面)

TCP的三次握手与四次挥手理解及面试题(很全面)置顶 青柚_ 2018-07-17 20:56:17 567889 收藏 3719分类专栏: 计算机基础 文章标签: IT面试基础版权 本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个

2021-05-08 21:52:19 188

转载 TCP报文格式解析(转)

TCP报文格式解析http://c.biancheng.net/view/6441.htmlTCP 报文是 TCP 层传输的数据单元,也称为报文段。TCP 报文中每个字段如图所示。上图中 TCP 报文中每个字段的含义如下:源端口和目的端口字段TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。TCP目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。序列号字段CP序列号(Sequence Number):占 32 位。它表

2021-05-08 21:20:53 723

原创 解决“‘pip‘ 不是内部或外部命令 pyinstaller生成EXE

解决"‘pip’ 不是内部或外部命令添加环境变量:path:C:\Users\Administrator\AppData\Local\Programs\Python\Python39\Scripts重新运行cmd即可cmd输入:pip install pyinstaller安装pyinstallercmd输入:C:\Users\Administrator>g:G:>cd downloads\tcpG:\Downloads\tcp>pyinstaller -F tcp_

2021-05-08 18:29:38 571

原创 freertos 源码详解六 任务的切换

PenSV异常1、任务切换的具体过程在PenSV中断服务函数里2、ICSR寄存器bit28置1,则引起PenSV中断#define portYIELD() { /* Set a PendSV to request a context switch. / portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT; / Barriers are normally n

2020-06-16 21:28:14 685

原创 freertos 源码详解五 任务的挂起删除和恢复

任务的删除vTaskDelete()1、根据任务句柄获取任务控制块,如果句柄为NULL,表示删除任务本身。pxTCB = prvGetTCBFromHandle( xTaskToDelete );#define prvGetTCBFromHandle( pxHandle ) ( ( ( pxHandle ) == NULL ) ? ( TCB_t * ) pxCurrentTCB : ( TCB_t * ) ( pxHandle ) )2、将要删除的任务从就绪列表中移除,如果优先级下只有一个任务,就

2020-06-15 23:36:03 323

原创 freertos 源码详解四 任务创建prvAddNewTaskToReadyList

xTaskCreate()函数的最后一个动作:prvAddNewTaskToReadyList( pxNewTCB );1.uxCurrentNumberOfTasks++;2.如果创建的是第一个任务,初始化以下列表:vListInitialise( &xDelayedTaskList1 );vListInitialise( &xDelayedTaskList2 );vListInitialise( &xPendingReadyList );3.用prvAddTaskT

2020-06-15 22:54:01 816

原创 freertos 源码详解四 堆栈初始化

在prvInitialiseNewTask函数中,有一个步骤7:pxNewTCB->pxTopOfStack = pxPortInitialiseStack( pxTopOfStack, pxTaskCode, pvParameters );下面详细讲解这个pxPortInitialiseStack:StackType_t *pxPortInitialiseStack( StackType_t *pxTopOfStack, TaskFunction_t pxCode, void *pvParam

2020-06-10 23:06:22 1296

原创 freertos 源码详解三 创建任务函数

一、xTaskCreatexTaskCreate( TaskFunction_t pxTaskCode,const char * const pcName,const uint16_t usStackDepth,void * const pvParameters,UBaseType_t uxPriority,TaskHandle_t * const pxCreatedTask )1。申请堆栈内存。pxStack = ( StackType_t * ) pvPortMalloc( ( ( (

2020-06-10 19:47:59 1414

原创 Cotex M3 通用寄存器传参过程

参数abc分别通过r0 r1 r2 传进来;BL跳转:BL 转移并连接。用于呼叫一个子程序,返回地址被存储在 LR 中BL Label ;转移到 Label 处对应的地址,并且把转移前的下条指令地址保存到 LR返回值如何返回?...

2020-06-10 00:06:12 349

原创 freertos 源码详解二

StackType_t *pxStack;pxStack = ( StackType_t * ) pvPortMalloc( ( ( ( size_t ) usStackDepth ) * sizeof( StackType_t ) ) ); /*lint !e961 MISRA exception as the casts are only redundant for some ports. */pxNewTCB = ( TCB_t * ) pvPortMalloc( sizeof( TCB_t )

2020-06-09 00:03:34 517

原创 freertos任务调度器

任务调度器初始化过程:1.创建空闲任务/* The Idle task is being created using dynamically allocated RAM. */xReturn = xTaskCreate( prvIdleTask,“IDLE”, configMINIMAL_STACK_SIZE,( void * ) NULL,( tskIDLE_PRIORITY | portPRIVILEGE_BIT ),&xIdleTaskHandle ); /*lint !e961

2020-06-06 17:44:56 799

原创 freertos 软件定时器

TimerHandle_t xTTimerHd1;TimerHandle_t xTTimerHd2;void vTimerCallback(void){static u32 a = 1;u32 b = 0;printf(“fast:%d\r\n”,a++);//xTimerReset( xTTimerHd2, 0 );if(a==5)xTimerStop(xTTimerHd2,0);b = xTimerIsTimerActive(xTTimerHd2);printf(“b is:%d\

2020-05-23 17:05:24 220

原创 FreeRTOS 二值信号量

运行过程描述如下: 任务 Task1 运行过程中调用函数 xSemaphoreTake 获取信号量资源,如果信号量没有被任务 Task2占用,Task1 将直接获取资源。如果信号量被 Task2 占用,任务 Task1 将由运行态转到阻塞状态,等待资源可用。一旦获取了资源并使用完毕后会通过函数 xSemaphoreGive 释放掉资源。 任务 Task2 运行过程中调用函数 xSemaphoreTake 获取信号量资源,如果信号量没有被任务 Task1占用,Task2 将直接获取资源。如果信号量被

2020-05-14 10:05:50 338

原创 中断卡在configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );

在使用stm32f4-discovery的FreeRTOS是设置一个按键中断,但是中断发生之后程序就卡住了,通过调试,发现程序卡在port.c中的configASSERT()语句。通过查找资料发现是中断优先级设置的问题。CORTEX内核的优先级是数值越小优先级越高,即0是最高优先级。FreeRTOS为了满足某些应用对中断实时性要求高的需求,使得中断优先级高于某个值之后,就不能调用操作系统的内核函数来提高实时性。而我所犯的错误就是将中断的优先级设置的高于这个值,却还在中断中调用操作系统提供的API引起的。

2020-05-12 21:06:04 5281 2

转载 FreeRTOS高级篇5---FreeRTOS队列分析

FreeRTOS高级篇5---FreeRTOS队列分析欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程...

2020-04-24 00:04:26 442

空空如也

空空如也

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

TA关注的人

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