- 博客(81)
- 收藏
- 关注
原创 freertos下printf(“hello\r\n“)和printf(“hello %d\r\n“,i)任务堆栈消耗有何区别
原先做的项目,TCP通讯采用stm32f103+freertos+w5500方案,实现的tcp单连接通信,同事提了个需求让实现tcp多连接,于是改了一版代码。根据打印结果看printf%d格式化输出比单纯打印纯字符串,任务堆栈要多消耗50个word大小左右,所以在你任务本身剩余堆栈很少的情况下,一个printf打印就可能导致溢出,程序崩溃。关联的任务函数tcpServerTask剩余堆栈大小是0,也就是说此时该任务已经没有堆栈空间了,printf改为%d打印,多一点就可能导致堆栈溢出;
2025-09-04 16:42:58
323
原创 篇五 网络通信硬件之PHY,MAC, RJ45
本章节主要介绍下phy模块, mac模块,RJ45连接器,及硬件通信接口MDIO,MII,RMII,GMII,RGMIIITEM描述PHY负责网络信号的物理收发,调制解调,编解码,波形整形,电平转换,自协商,链路建立检测,属于物理层设备MAC控制以太网帧的生成与接收,处理链路层协议,一般集成在MCU/SOC内部(比如stm32f407,内部集成mac模块,外接phy芯片比如LAN8720即可实现以太网通信),属于链路层设备;mac和phy之前通过MII,RMII,GMII,RGMII接口进行通信。
2025-07-25 17:16:34
621
原创 篇二 OSI七层模型,TCP/IP四层模型,路由器与交换机原理
本章节主要介绍OSI七层模型,TCP/IP四层模型划分,以及日常使用的路由器,交换机的一些基础知识。
2025-07-04 17:33:09
756
原创 stm32 freertos下基于 hal库的模拟I2C驱动实现
最近搞了两个项目,调了一版freertos下基于hal库得模拟I2C驱动,非常实用,直接拷贝就能用,这里做下记录,主要用到如下四个文件:
2025-06-30 15:08:51
422
原创 嵌入式网络开发系列篇----学习大纲
1.以太网基础历史、速率、拓扑、以太网帧结构MAC 地址、广播/单播、多播机制网络参数:IP、子网掩码、网关、DNS2.OSI 七层模型 & TCP/IP 四层模型每层功能、典型协议、典型设备路由器、交换机工作原理(物理 vs 二层 vs 三层)3.网络硬件接口PHY、MAC、RJ45、MDIO、MII/RMII、千兆GMII/RGMII传输介质、电气标准(差分对、阻抗、变压器耦合)常见 PHY 芯片(LAN8720、DP83848、KSZ8081 等)
2025-06-25 17:41:03
238
原创 virtualBox安装ubuntu,常用知识点
有时候经常需要编写一个小的c语言验证程序,这个时候在linux下面编译运行比其他编译器方便的多,因此需要安装linux虚拟机。这里介绍下virtualBox安装ubuntu,几个非常有用的知识点。virtualbox 设置里面有“共享文件夹”这一项,关闭虚拟机设置下重启虚拟机即可。这是因为区域和语言不一致导致,比如区域中国,语言英语;su - leo //切回其他账户。3.vi编辑,输入箭头显示字母ABGD。修改/etc/vimrc,最后一行添加。2.ctrl+alt+t 打不开终端。
2025-06-13 15:25:37
328
原创 堆栈(栈)的实现
链表栈#include <stdio.h>#include <stdlib.h>typedef int data_t;typedef struct linkstack{ data_t data; struct linkstack *next;}linkstack_t;linkstack_t *creat_linkstack(){ linkstack_t *head; head = malloc(sizeof(linkstack_t)); head->
2022-02-14 06:50:08
394
原创 队列queue的实现
顺序表实现##list.c#include <stdio.h>#include <stdlib.h>typedef int data_t;typedef struct list{ data_t *data; //保存数据的空间 int size; //容器能保存的元素个数 int last; //保存最后一个有效元素的下标}list_t;/*返回创建好的 空顺序表 的地址*/list_t *creat_list(int size){ list_t *
2022-02-14 06:47:33
348
原创 顺序表实现案例
范例1## list.c#include <stdio.h>#include <stdlib.h>typedef int data_t;typedef struct list{ int size; //容器能保存的元素个数 int last; //保存最后一个有效元素的下标 data_t data[0]; //不定长数组名 必须放于 结构体的最后一个成员}list_t;/*返回创建好的 空顺序表 的地址*/list_t *creat_list(int
2022-02-14 06:36:05
524
原创 冒泡,快排和树
冒泡#include <stdio.h>#include <stdlib.h>int data[] = {3,8,2,9,1,5,7,6,4}; //3,2,8,1,5,7,6,4,9int maopao(int data[],int size){ int i,j; int temp; for(j = 0;j < size - 1;j ++){ for(i = 0;i < size - 1 - j;i ++){ if(data[i]
2022-02-14 06:21:20
122
原创 单向链表及双向链表
链表#include <stdio.h>#include <stdlib.h>typedef int data_t;typedef struct linknode{ data_t data; struct linknode *next;}link_t;link_t *creat_link(){ link_t *head; head = malloc(sizeof(link_t)); head->next = NULL; return head;
2022-02-14 06:11:44
494
原创 linux网络编程
网络基本知识:TCP协议分成了两个不同的协议TCP:用来检测网络传输中差错的TCP:面向连接的数据流传输服务 可靠 适合网络状况不是很好的场合UDP:面向无连接的传输协议 不可靠,但是实时性更好,适合网络状况佳的场合socket套接字:socket是一种特殊的IO接口,也是一种文件描述符。不仅能实现本地不同进程之间的通信,而且通过网络能够在不同主机进程之间进行通信分类:流式套接字SOCK_STREAM 应用TCP通信数据报套接字SOCK_DGRAM 应用U
2022-02-11 00:27:12
1340
原创 linux shell
1、shell是一个命令行解释器,能够使用户和操作系统进行交互。命令格式(通常包括三部分,选项和参数是可选项):命令 选项 参数连续按下两次TAB键用于命令补齐,按下一次TAB键用于文件名补齐。2、shell通配符和特殊字符'*‘表示匹配任意长度的字符串,’?'表示匹配一个长度的字符管道(|):将第一个命令的输出作为第二个命令的输入,,使用管道可以将一些命令联合起来使用,得到单个命令无法实现的效果。 eg:ls /usr/bin |wc -W输入/输出重定向:改变shell命令的输入输出
2022-02-11 00:25:50
815
原创 C语言(二)
1、sizeof(fun)=1sizeof(&fun)=4 fun为函数名解释:函数名其实是一个符号表,占用一个字节,虽然函数名可以当做函数的入口地址,当做一个指针,但是并不能像指针那样占用4个字节,当取地址的时候,确定是4个字节2、存储类型auto:默认情况下,所有的变量都是autoregister:表示变量是存放在CPU寄存器中,而不是存放在内存里面,因此不能用&符号取内存地址extern:声明变量或者函数是来自外部的文件static:修饰局部变量:作用域为定义该局
2022-02-11 00:25:09
924
原创 IO与静态库动态库
一、文件IO1、什么是系统调用(文件IO)(1)用户空间进程访问内核的接口,使用内核提供 的各种功能(2)极大提高了系统的安全性和用户程序的可移植性(因为操作系统大多是多任务的,直接访问硬件会出问题)2、什么是库函数(标准IO)(1)库函数是为了实现某个功能而封装起来的API集合(用户编程接口)(2)提供统一的编程接口,更加便于应用程序的移植系统调用和库函数的区别************系统调用发生在内核空间,如果用户空间的一般应用程序使用系统调用来进行文件操作,会有用户空间切换到内核空间的
2022-02-11 00:24:10
439
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1