自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

坛城的博客

左手做技术,右手做产品

  • 博客(75)
  • 资源 (6)
  • 收藏
  • 关注

原创 gdb监视

GDB(GNU Debugger)是一个功能强大的调试工具,可以用于在程序运行时监视变量的值,包括在特定条件下触发断点。要监视一个地址上的值并带有条件,你可以使用。命令可以用于监视任何内存地址上的值,但要小心不要访问无效的地址,以避免导致程序崩溃。此外,设置太多的监视点可能会影响程序的性能,所以只在需要时使用它们。在实际情况中,如果怀疑一个进程中的变量被踩内存了,但是不知道什么时候会被踩,就可以用下面的方法进行debug。这将监视地址0x12345678上的32位整数值。

2023-09-15 19:52:33 1220

原创 likely和unlikely的用法

在实际使用中,应该基于性能分析和测试结果来确定哪些分支更有可能和不太可能执行,并相应地使用这些宏。如果错误地使用这些宏,可能会导致性能下降,因此建议在优化代码之前进行充分的性能分析。它们通常与条件语句的分支一起使用,以指示哪些分支更有可能执行,哪些分支更不可能执行。在一般的应用程序中,使用这些宏的性能影响可能不明显,因此在普通应用程序中使用它们可能没有太大的必要。例如,在Linux内核中,通常会将likely用于可能出现的快速路径,而将unlikely用于可能出现的慢速路径,以帮助编译器更好地优化代码。

2023-09-15 15:02:15 440

原创 linux C语言 socket的server、client 实现

你可以将上述代码分别保存为 server.c 和 client.c,并分别编译成可执行文件,然后在两个不同的终端窗口中运行它们。如果你使用的是不同的编程语言或开发环境,编译步骤可能会有所不同。通常,你需要指定套接字的类型(例如,SOCK_STREAM表示TCP套接字)和地址族(例如,AF_INET表示IPv4地址族)。在实际应用中,不可能像实例一中,server只接收一次,client只向server发送一次。// 关闭套接字, 只要关闭client,server端的recv就不会阻塞了,返回0!

2023-09-13 09:32:13 974

原创 fflush的用法

函数用于刷新文件流的缓冲区,确保已经写入或读取的数据被立即写入或读取到文件中。这种方法会循环读取输入缓冲区中的字符,直到遇到换行符或文件结束符为止,从而清空了输入缓冲区中的内容。的调用通常是可选的,因为标准库会自动管理缓冲区。如果你想要清空输入缓冲区,可以使用其他方法来实现,例如使用一个循环读取并丢弃输入缓冲区中的字符。,因为后者的行为是不确定的,并且在不同的编译器和平台上可能会导致不一致的结果。是一个不被推荐使用的语句,因为它在标准C中的行为是未定义的。是一个指向文件流的指针,可以是标准输入(

2023-09-11 15:17:26 1795

原创 机考 出牌顺序 dfs

机考

2022-04-22 17:49:26 1086 4

原创 数据三种校验方式

奇偶校验奇偶校验(Parity Check)是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。说白了,就是统计每一位的“1”是奇数还是偶数,进而将校验位设置为0或1,当然也能够看到缺点十分明显:如果只有一位电平变化,能够检

2022-01-07 15:57:42 4651 2

转载 七种寻址方式

七种寻址方式(从该处学习转载,感谢,如有侵犯,请联系删除)立即寻址操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。立即数寻址方式通常用于对通用寄存器或内存单元赋初值。说白了就是在代码中直接向寄存器赋固定值。MOV AX,4576H;将16位数据4576H传送到AX寄存器寄存器寻址方式指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。寄存器寻

2022-01-06 16:38:25 7048 1

原创 关于嵌入式操作系统抢占式调度逻辑

关于嵌入式操作系统抢占式调度逻辑首先强调一下规则,这是当初理解错的原因, 我以为占用CPU的时间和操作IO设备的时间是同时的,其实是有先后顺序的。 其次,我以为抢占的任务也会再次操作IO,实际并不会,操作过一次IO设备就完事儿。 因为是抢占式调度,每个任务调度器都会各安排一次抢占,只是安排抢占的优先级不同顺序不同而已,这样才能保证每个任务都有轮得到的机会,不然如果只看高优先级任务等待就把CPU给高优先级,低优先级任务无论如何也轮不到了不是。 嵌入式操作系统多任务

2022-01-01 16:36:32 978

原创 《C语言编程》__asm__ volatile 内联汇编

__asm__ volatile 内联汇编

2021-12-31 16:47:58 8566

原创 从零实现 LWIP 四(一对一 UDP、TCP客户端 DHCP 网线热插拔和自动重新连接)

一、前言:我回来继续搞lwip了,DHCP这块之前在F429上调通了,但是并没有实战应用。此次在F407上实现,底层驱动差不太多。代码部分尽量不给大家密密麻麻的粘贴复制,主要介绍整体实现的思维。二、成果:1.实现了设备DHCP功能2.在DHCP失败的时候使用静态IP建立通讯,而且考虑到了大量设备DHCP都失败时,用一种算法得到不同的静态IP建立通讯。3.实现了网线的热插拔,网线断开关闭TCP,网线接上重新尝试DHCP和建立TCP连接4.server方断开连接后能够检测到,并且当s

2020-05-25 14:44:17 6737 12

原创 python入门:使用jupyter

​具体怎么使用jupyter其实非常简单运行一段那有一些快捷方式,编写完python语句后 shift+enter可以运行查看函数用法shift+tab+tab可以看某函数用法注释选中语句,ctrl+?可以注释,再使用ctrl+?可以取消注释或者在语句前面加#也是注释""" 类似C语言的/* */,比如要全部注释掉一段话那么""" 我是注释段 """ tab自动补齐当前面定义了一些变量,或者使用一些python的函数时,可以像linux一样写前面几.

2020-05-17 23:43:06 644

原创 python入门:环境搭建

anaconda(开源的Python包管理器)Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 [1] 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 531 MB),如果只需要某些包,或者需要节省带宽或存储空间,也可以使用Miniconda这个较小的发行版(仅包含conda和 Python)。TensorFlowTensorFlow™是一个基于数据流编程(dataflow programming)的符号数.

2020-05-17 23:35:55 208

原创 python入门:前言-为何学习python

直接原因是个人工作需要,因为要用python来编写测试脚本,因此得学呀。那么间接原因是python被吹的太火了,身边的上岁数的硬件大哥都在自学python。公众号的恰饭广告也是python的课程。据说有些公司要求无论何岗位都要学python。我女朋友也在自学,虽然没我这么大张旗鼓的,但至少说明python的影响力确实已经足够大了。1.所以我还真的就好奇,他就有那么好使?我就不信,是个人都学的语言,他就没有点儿弊端。2.他到底能干点儿啥?他能干的,C语言能不能干?3.是否有前途,是否像C语言一样,一招

2020-05-17 23:30:05 169 5

原创 从零实现 Cortex-M7从驱动到应用(三)触摸屏

cubemx配置触摸屏自然还是参考之前的工程触摸屏芯片是IIC通讯,我们知道STM32因为专利问题,其IIC功能不稳定,所以我们不用IIC,而是用GPIO口模拟IIC功能。那么我们在cubemx就只配置GPIO移植驱动移植完驱动要修改一些,就大功告成了...

2020-05-02 21:28:40 268 1

原创 从零实现 Cortex-M7从驱动到应用(二)SDRAM+RGB屏幕驱动

找来原来写的F429配置文章,我发现北极星和阿波罗不一样的地方,北极星支持RGB888、阿波罗只支持RGB565。但是北极星的教程仍用RGB565。这跟色域有关系,其实那么高的色域肉眼也很难分辨了,RGB565也够用了。所以我们还按照原来配置F429的那样去做试试看先。配置时钟为33M,但是系统时钟就要改变了,那么我们采用原子推荐的400,重新计算没问题,这样我们先生成代码编译一下看看...

2020-05-02 21:28:17 981

原创 从零实现 Cortex-M7从驱动到应用(一)分散加载+SDRAM+SPI_FLASH

接下来我将与大家分享H750的开发,最终实现emwin的运行。搭建环境cubemx由于cubemx老版本不支持H750,所以只能用新版本,注意:老版本支持工程路径为中文,新版本不支持!需要H750的板级包,在cubemx上保存工程时会提示缺少,按下一步安装即可,cubemx上还是很快的。MDK如果V5.20不支持,那么就安装V5.23。因为之前没有用过H750,因此...

2020-05-01 23:57:13 1623

原创 从零实现 Cortex-M7从驱动到应用(四)emwin的移植与实现

这是打算实现的移植emwin好了,千辛万苦终于把需要的东西配齐了,SDRAM、SPI_FLASH、LTDC、TOUCH、malloc我们终于可以开始移植emwin了,希望能够一帆风顺,祝我成功吧为何改变了一下工程文件划分文件夹,再下载程序就不跑了。我尝试恢复原状,然后用cubemx重新生成一下再看。如果还不行,那我只好重新生成代码了,好在文件都在。今后做成功一个阶段...

2020-05-01 23:13:28 462

原创 Linux(十四)定时器实现消抖(EPIT)

目的:前面在用KEY的时候,在中断中为了省事儿使用延时法进行按键消抖,但其实是不应该的。因为中断本身的意义就在于抢占CPU去执行一些比较紧急的任务,如果一个高优先级的中断服务函数加延时霸占CPU的资源,那么其他任务就全部干不了了。这就也丧失了中断的意义了,本来是“借”变成了“霸占”。也就是说,在中断服务函数中尽量不要用延时、等待信号量、或执行一些时间特别长的操作。其实我们想消抖,目...

2020-04-30 09:59:21 467

原创 Linux(十三)定时器系统

EPIT定时器EPIT 的全称是: Enhanced Periodic Interrupt Timer,直译过来就是增强的周期中断定时器,它主要是完成周期性中断定时的。学过 STM32 的话应该知道, STM32 里面的定时器还有很多其它的功能,比如输入捕获、 PWM 输出等等。但是 I.MX6U 的 EPIT 定时器只是完成周期性中断定时的,仅此一项功能!至于输入捕获、 PWM 输出等...

2020-04-29 13:48:42 585

原创 Linux(十二)中断系统

STM32 的中断系统主要有以下几个关键点:①、 中断向量表。②、 NVIC(内嵌向量中断控制器)。③、 中断使能。④、 中断服务函数。中断向量表中段向量表就是说明都有什么中断,这些中断服务函数在哪个位置。这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。中断向量表放在整...

2020-04-29 12:55:40 796

原创 Linux(十一)工程管理

和STM32时的开发一样,软件讲层级分明,工程管理是必不可少之前我们将所有的文件、中间文件、执行文件等等都放在工程的根目录下,十分乱杂。所以仿照STM32的风格,将各种文件按照功能和层级进行分类放置,使用起来就会更规整。之前:整理之后:因为有些文件不放在根目录下了,所以用原有的编译器就找不到某些文件了,因此需要重新整理Makefile其实 Makefile 的重点工作就...

2020-04-29 12:38:01 195

原创 Linux(十)移植I.MX6U SDK

这是ARM的内核分布我之前常用的STM32F103系列是Cortex-M1;STM32F407、STM32F429是Cortex-M4系列,而NXP的I.MX6U是Cortex-A7内核。============================================================================NXP的SDK这个 SDK 包就类...

2020-04-29 12:35:13 358

原创 Linux(九)用STM的方式操作寄存器

封装寄存器方便管理前面章节看到,即便是C语言点亮LED,也是对寄存器地址的赋值:#define CCM_CCGR0 *((volatile unsigned int *)0X020C4068)#define CCM_CCGR1 *((volatile unsigned int *)0X020C406C).....................时钟寄存器的个数还不算多,那么:...

2020-04-29 12:29:12 359

原创 Linux(八)C语言版LED,从汇编到C

启动文件 startup_stm32f10x_hd.s 这个汇编文件就是完成 C 语言环境搭建的,当然还有一些其他的处理,比如中断向量表(中断向量表的设置是在system_stm32f1xx.c,可能处理是在startup_stm32f10x_hd.s下)等等。当 startup_stm32f10x_hd.s 把 C 语言环境初始化完成以后就会进入 C 语言环境==============...

2020-04-29 12:26:02 395

原创 Linux(七)I.MX6U启动方式详解

I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动。用户可以根据实际情况,选择合适的启动设备。不同的启动方式其启动方式和启动要求也不一样,比如上一章中的从 SD 卡启动就需要在 bin 文件前面添加一个数据头,其它的启动设备也是需要这个数据头的。本章我们就来学习一下 I.MX6U 的启动方式,以及不同设备启动的要求当...

2020-04-29 12:14:38 589

原创 Linux(六)Makefile的作用和实现

按照STM32的经验,代码写完之后,我们得编译生成.bin然后烧写至flash中。那么I.MX6U是这样吗?我们现在已经写好了led.s,如何生成.bin,又如何烧写至I.MX6U?led.s就是汇编语言写的文件,程序写完后还需要编译,也就是生成执行文件。还不算完,要是烧写在板子上还要生成.bin,我们需要用到Makefile。那么Makefile是干啥的呢?字面意思make文件,...

2020-04-29 11:40:43 581

原创 Linux(五)I.MX6U的管脚命名规则、了解寄存器

前言:前面我们介绍了汇编语言的作用,实际上就是C环境还没准备好时,我们只能用汇编去进行一些必要的操作,例如DDR、SP指针的初始化、跳转指令等。具体该如何实现这些功能,并且点亮LED呢?I.MX6U的管脚命名规则STM芯片的管脚是用PA_ping0、PB_ping1、来命名。但是I.MX6U是用GPIO1~GPIO5 共五组 GPIO的管脚功能来命名,例如:IOMUXC_SW_MUC_...

2020-04-29 10:46:09 1020

原创 Linux(四)汇编基础知识、为什么要用汇编

为什么要学习汇编Cortex-A 芯片一上电 SP 指针还没初始化, C 环境还没准备好,所以肯定不能运行 C 代码,必须先用汇编语言设置好 C 环境,比如初始化 DDR、设置 SP指针等等,当汇编把 C 环境设置好了以后才可以运行 C 代码。所以 Cortex-A 一开始肯定是汇编代码,其实STM32 也一样的,一开始也是汇编,以 STM32F103 为例,启动文件startup_stm32...

2020-04-29 10:09:19 698

原创 Linux (二)常用的shell

rm 是移除mv是更改名称和移动cd 是去用户根目录下cd /是去根目录cd ../去上一层目录下pwd 查看当前路径sudo 用root身份执行chmod 更改文件权限,还是用数字的方法更方便 chmod 766 text.txt关机是 poweroff重启是 reboot创建Makefile是用touch命令touch Makefile编译是 g...

2020-04-28 19:08:21 92

原创 Linux(三)初探Cortex-A7架构、I.MX6U

I.MX6UL 使用的是 Cortex-A7 架构I.MX6U-ALPHA 开发板配套的 I.MX6U 核心板,采用 MCIMX6Y2CVM05AB(528MHz)或MCIMX6Y2CVM08AB(800MHz,实际 792MHz)作为主控 CPU,这两款主控都是工业级的。自带 32KB 的 L1 指令和数据 Cache、 128KB 的 L2 Cache,集成 NEON,集成双精度硬件浮...

2020-04-28 19:08:03 1310

原创 Linux(一)环境搭建

一、虚拟机虚拟机的使用是实验用,方便学习使用,但是这不是最终的使用习惯。虚拟机一定不要用破解版的,最好任何的软件以后都不要用破解版的当然没钱的话可以下载注册机,但是!!!一定不要在不认识的网站和渠道下载软件!!!弹窗你懂的!!!虚拟机和Ubuntu镜像我之前有,所以没用原子给的,反正安装卸载五六遍,实在是不稳定容易卡死。后来用原子给的,果真没有卡死过了,很稳定。二、初探ubuntu...

2020-04-28 18:53:09 148

原创 从零实现 LWIP 三(TCP客户端服务端、静态IP)

上一章实现了UDP功能,本章将实现TCP功能。TCP和UDP不同的是,TCP需要先建立连接,LWIP驱动50%都是TCP的,10%是UDP,可见TCP要复杂的多。但是使用起来,TCP并没有感觉复杂很多。进入正题,先介绍下我的硬件设备以及软件版本硬件:正点原子阿波罗STM32F429IGT6,外部PHY芯片 LAN8720软件:keilv5, cubemx 4.23.0尝试过最新...

2020-04-10 17:52:17 3358 3

原创 从零实现 LWIP 一(配置过程)

欢迎留言讨论~之前一直对TCP/IP没有接触,也没有系统的学习,一穷二白。因为其内容的繁杂,对其可以说望而却步,常常躲着走。看看这类书的图片。。。见过这本书的实物,那叫一个厚,真的不敢学,当时就有一种这辈子永远学不会的感觉。然后还有一本据说比较简单的这本我看过一两章,他把很多知识结构用图示表示,确实易于理解,但是一段时间不用,还是忘个精光。因为那些TCP/IP的...

2020-04-10 17:35:48 1693

原创 从零实现 LWIP 二(UDP、无DHCP)

欢迎留言讨论~之前一直对TCP/IP没有接触,也没有系统的学习,一穷二白。因为其内容的繁杂,对其可以说望而却步,常常躲着走。看看这类书的图片。。。见过这本书的实物,那叫一个厚,真的不敢学,当时就有一种这辈子永远学不会的感觉。然后还有一本据说比较简单的这本我看过一两章,他把很多知识结构用图示表示,确实易于理解,但是一段时间不用,还是忘个精光。因为那些TCP/IP的...

2020-04-08 18:15:44 1284

原创 关于函数入口参数是“指针的指针”的用法 void **

最近在看LWIP,看到这样一个函数,因为LWIP做到尽可能的减少内存间复制的处理,所以通常是让应用层直接去操作协议层的netbuf,所以这个函数就是一个获取netbuf指针的函数。可以看到入口参数是void** data。函数内,buf->ptr->payload就是netbuf的指针使用时为什么要传入指针的指针去获取一个指针呢?直接一个指针不行吗?如...

2020-04-08 14:15:47 1133

原创 debug: Serial wire、JTAG-4、JTAG-5的区别,以及如何应用。

之前用的都是最小STM32F103RBt6的芯片,支持JTAG-5。一直用这种调试方式。然后在MDK中选择SWD,这么去用。但是最近要节约成本,开始考虑管脚更少的,32pin、48pin的。这些就不支持JTAG-5了,只支持Serial wire的方式,也就是两根线:SWDIO、SWCLK。他跟JTAG-4、JTAG-5的区别在哪?从管脚上看,少了Rvef、GND、RESET管脚。JT...

2020-03-31 17:53:33 11528

原创 从零实现 USB转虚拟串口 CDC

上一次调试是USB读卡器+FATFS,这次是USB转虚拟串口。说来也巧了,这是我大学的毕设,那个时候用STC芯片实现USB转串口,差点儿没把我给搞死。多年后遇见故人,甚是感慨,五年过去了,混到这个水平,惭愧惭愧。首先,配置cubemx,只需要修改中间层支持的类,原来是MSC,现在是CDC:没有什么可改动的了,生成代码,编译,没有问题。然后,需要安装一下ST的USB虚拟串口驱动。就跟...

2020-03-28 13:51:56 5192 3

原创 从零实现 USB_SLAVE读卡器 USB_MSC+FATFS+SD/SPI_FLASH/NANDFLASH

要实现USB读卡器,就是F429从SD卡读数据,作为从设备用USB传输给主机。什么是OTG?OTG是On-The-Go的缩写,是近年发展起来的技术。2001年12月18日由USB Implementers Forum公布,主要应用于各种不同的设备或移动设备间的联接,进行数据交换。产生背景USB技术的发展,使得PC和周边设备能够通过简单的方式、适度的制造成本,将各种数据传输速度的设备连接...

2020-03-26 17:58:42 4295 13

原创 从零实现 IAP远程升级(从物联网到F407到F103)

IAP就是在线升级程序,有一个前提,就是程序分为两部分,从bootloader启动,跳转到APP部分。分三步:1.APP从串口或者网络接收升级的bin文件,然后先放在一个地方。这个地方可以是flash某个位置,也可以是norflash。2.完成后,校验一下整段程序CRC看是否正确。若正确则重启。3.bootloader把这个bin文件复制到APP的位置上,覆盖原先的APP,跳转到A...

2020-03-24 21:28:55 1309

原创 从零实现 FATFS+SD卡

cubemx软件版本是V4.23.0,芯片型号是STM32F103ZET6、STM32F429IGT6;SD卡是闪迪的64G tf卡,然后用了转大卡的卡槽,exFAT。该篇为调试过程,所以阅读时一定要看到尾,中间的判断是有误的!!!中间会涉及到F429是因为一直失败,我拿两个板子来回尝试。调试过程:注意,//在生成fatfs代码后,一定要在初始化SDIO时或者FATFS初始化...

2020-03-24 17:47:26 3097 1

F429 FATFS+SD卡实验.rar

毫无保留提供代码工程,包含cubemx配置文件。cubemx软件版本是V4.23.0,芯片型号是STM32F429IG,SD卡是闪迪的64G tf卡,然后用了转大卡的卡槽,exFAT。

2020-03-24

F103 FATFS+SD卡实验.rar

毫无保留提供代码工程,包含cubemx配置文件。cubemx软件版本是V4.23.0,芯片型号是STM32F103ZET6,SD卡是闪迪的64G tf卡,然后用了转大卡的卡槽,FAT32。

2020-03-24

实验24 IIC eeprom实验.rar

STM32 IIC实验:cubemx EEPROM 原文链接: https://blog.csdn.net/nianzhu2937/article/details/103851394#comments

2020-01-09

Bsp_nandflash.rar

基于STM32F407ZG的nandflash底层的驱动,包括bsp_nandflash.c 和 bsp_nandflash.h

2019-08-21

bsp_nandflash.h

STM32F407的nandflash底层驱动,包含映射表的维护,坏块管理等。

2019-08-21

bsp_nandflash.c

STM32F407的nandflash底层驱动,包含映射表的维护,坏块管理等。

2019-08-21

空空如也

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

TA关注的人

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