自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Makefile】笔记

【代码】【Makefile】笔记。

2023-04-27 17:25:42 536 1

原创 【GD32】GD32工程打开后报错

GD32工程打开后报错,Third Party Device Support for xxxxx。解决办法:修改工程后缀。

2022-10-10 11:19:00 957

原创 【AT32】雅特力固件库开发入门(视频连载中)

【第一集】雅特力单片机搭建环境【第二集】雅特力单片机建立工程【第三集】雅特力单片机建立工程(简化版)【第四集】雅特力单片机点亮LED【第五集】雅特力单片机嘀嗒定时器【第六集】雅特力单片机修改系统时钟【第七集】雅特力单片机Printf【第八集】雅特力单片机UART通信(中断接收)【第九集】雅特力单片机UART通信(DMA接收)...

2022-08-20 15:20:56 1409

原创 ulog+EasyFlash使用笔记

背景介绍ulog是用来打印日志的,EasyFlash是用来存储数据的,这两个软件包加在一起,就可以实现日志的掉电保存功能,并且支持日志打印等级的动态设置,这些等级等级可以存储在EasyFlash中,这样不需要每次上电都设置一次调试等级。问题介绍移植成功EasyFlash+ulog以后,我直接就在main函数中初始化了EasyFlash,因为EasyFlash依赖FAL,因此也需要先初始化FAL。而ulog是自动初始化的,我就没有对他进行初始化了。如下所示,int main(void){ f

2022-05-31 09:31:48 1169 1

原创 【github】解决github无法访问、很卡问题

最简单的办法就是直接使用镜像网站。最常用的镜像网站https://hub.fastgit.org比如我们要访问这个项目:https://github.com/yidao620c/python3-cookbook需要把路径中https://github.com换为https://hub.fastgit.org就可以。...

2022-05-24 10:11:07 1148

原创 【RT-Thread Master】at24cxx软件包使用笔记

硬件介绍RT-Thread版本:V4.1.0软件包名称:at24cxxMCU型号:AT32F407VET7EEPROM型号:AT24C16使用说明1、使用menuconfig将软件包添加进入工程,路径如下所示。2、把IIC总线打开,这里使用软件IIC,如果已经打开了就不用再次打开,IIC所用的引脚暂时先不管。3、然后编译工程。4、编译完成以后,打开工程,可以发现IIC驱动已经被添加进来了,at24cxx软件包也添加进来了。5、然后我们进入at24cxx.h文件,修改我们EEP

2022-05-09 14:33:30 1242 1

原创 【GIT】github的图片无法显示解决办法

把DNS服务器地址改成:223.5.5.5和 223.6.6.6

2022-05-09 09:28:38 414

原创 【AT32】雅特力单片机无法烧录

问题描述雅特力单片机使用JLINK烧录时,报programming of range @ address 0x08000000 failed(block verification error)错误,如下图所示,但是可以正常连接和擦除。解决办法到雅特力官网下载ICP工具,使用JLINK连接单片机,连接成功以后会问你要不要解除读保护,点击是即可。...

2022-04-18 17:01:00 2395 2

原创 【C++】简单的链表示例

#include <iostream>using namespace std;typedef struct Person{ Person* next; string name;}*P_Person,S_Person;S_Person list_head_node;//链表头结点,方便对链表进行操作void list_init(void)//链表初始化{ list_head_node.next = NULL; list_head_node.name = "head n

2022-02-12 10:43:43 566

原创 【C++】类模版

基本语法声明类模板的语法为:template<typename 类型参数1, typename 类型参数2, …> class 类名{ //TODO:};在类外定义成员函数时仍然需要带上模板头,格式为:template<typename 类型参数1 , typename 类型参数2 , …>返回值类型 类名<类型参数1, 类型参数2, ...>::函数名(形参列表){ //TODO:}示例#include <iostream&

2022-02-10 11:43:00 328

原创 【C++】函数模版

函数模版定义方法template <typename 类型参数1 , typename 类型参数2 , ...> 返回值类型 函数名(形参列表){ //在函数体中可以使用类型参数}函数模版示例#include <iostream>using namespace std;template <typename T> void my_swap(T& a, T& b)//不带返回值的函数模版{ T temp = a; a = b;

2022-02-10 11:13:20 456

原创 【C++】基础

1、C++第一个程序示例:#include <iostream>using namespace std;int main(int argc, char** argv){ cout << "hello World" << endl; return 0;}2、C++访问控制属性权限private私有的,只能在类的内部被访问public公有的,能在类的外部被访问示例:#include <iostream&g

2022-01-21 17:23:40 383

原创 【Linux】GCC编译器基础

常用选项选项功能-o指定生成的可执行文件名-E预处理-S编译-c编译并汇编-g生成的可执行文件带调试信息,方便使用gdb进行调试-Ox大写字母-O加数字,设置编译器的优化等级,等级越大编译出来的程序越小例如:gcc -E hello.c -o hello.i //预处理,将hello.c转换成hello.i,-o表示执行输出文件名gcc -S hello.i -o hello.s //编译,将hello.i转换成hello.s,-o表

2022-01-14 10:26:15 736

原创 【Linux】开发流程分析

需求假设现在有一个需求,就是要求在JZ2440上实现一个LED闪烁的功能,要求开发板一上电以后就LED闪烁,并且要使用Linux系统来实现这个功能,应该怎么做呢?实现配置、编译好一个u-boot配置、编译好一个linux内核创建一个根文件系统将这个三个东西烧录进开发板中在PC机上编写一个LED闪烁的程序,并编译好在PC机上某一个路径打开NFS服务,然后在开发板上挂载这个路径将LED程序拷贝到开发板上在开发板上/etc/inittab里面添加命令,或者放到脚本文件中,让系统启动以后运行这

2022-01-12 15:40:26 344

原创 【Linux】NFS网络文件系统

原因因为我们之前制作的根文件系统,每次都要烧写才能将他放到开发板上面,很麻烦。因此就诞生了网络文件系统NFS。网络文件系统就是说,文件系统是放在服务器上的,当Linux内核启动的时候,就去服务器上找到指定的路径当作是根文件系统进行启动。这样就可以避免反复烧写的问题。NFS挂载方式一:开发板启动以后手动挂载1、接上网线2、配置开发板的IP地址ifconfig eth0 upifconfig eth0 192.168.1.5ping 192.168.1.33、先从Flash启动根文件系统,再用

2022-01-12 15:17:41 407

原创 【Linux】构建根文件系统

最小根文件系统组成dev/console dev/null使用bustbox生成的各种命令etc/inittabC库配置、编译busybox、生成根文件系统的大部分内容busybox可以理解为shell命令的集合,我们用它来制作根文件系统的大部分内容。配置busybox解压源码以后查看INSTALL文件,可以在文件的开头看到下面的信息,它告诉用户怎么配置,编译busybox因此就需要执行make menuconfig对busybox进行配置。那么需要配置什么呢?1、配置tab补

2022-01-11 23:04:54 506

原创 【Linux】构建根文件系统之busybox

什么是busybox?根文件系统里面其实就是各种应用程序的集合,例如sh、cd、ps这些命令。如果我们要将这些应用程序的源码都拿来进行编译然后再放进根文件系统里面,就会很麻烦不太实际。而busybox就是这些应用程序的集合,我们执行ls命令,实际上是执行busybox ls命令,因为ls命令实际上是指向busybox的链接,如下图。因此当我们想要知道ls命令做了什么事情的时候,就需要找到busybox的源码,去分析它做了什么事情。busybox里面的init程序上文我们讲到内核挂载根文件系统以后,会

2022-01-10 18:56:57 350

原创 【Linux】构建根文件系统之启动第一个应用程序

内核怎样启动第一个应用程序?1、首先内核要去挂接根文件系统2、然后打开dev/console,然后sys_dump(0), sys_dump(0),就是将dev/console复制两次。也就是说,内核打开了三个dev/console文件,分别代表标准输出printf,标准输入scanf,标准错误err3、最后使用run_init_porcess()函数,启动应用程序。启动的应用程序,先是判断u-boot的命令行参数是否有传入init==xxx函数如果有,就启动这个xxx函数如果没有或者xxx函

2022-01-10 15:04:04 349

原创 【Linux】kernel解压、打补丁、配置、编译

解压将linux内核源文件和补丁文件通过FTP服务器上传到服务器,然后解压文件tar -xjvf linux-2.6.22.6.tar.bz2打补丁cd linux-2.6.22.6/patch -p1 < ../linux-2.6.22.6_jz2440_v2v3.patch配置配置有2种方法:使用默认的配置,在默认的配置基础上进行配置使用厂家的配置文件,在厂家的配置基础上进行配置第一种方法,先列出默认有哪些配置,默认的配置在内核源代码的/arch/arm/configs

2022-01-10 14:07:03 920

原创 【Linux】配置u-boot环境变量

命令功能q退出菜单print打印u-boot参数set bootdelay 10设置u-boot延时为10秒save保存u-boot参数reset重启help列出所有命令? md查看md命令帮助信息 ? 命令 表示查看此命令的帮助信息...

2022-01-10 11:47:39 93

原创 【Linux】u-boot解压、打补丁、配置、编译

源码上传使用FTP工具将u-boot源码和补丁文件上传到服务器,服务器需要开启FTP服务,怎么开启FTP服务可以自行百度解压u-boot这里用到了之前的解压命令,复习一下tar是打包命令,-x是解压,-j是bzip2方式进行解压,-v是输出详细信息,-f是指定文件名,如果是gzip文件,就用-xzvftar -xjvf u-boot-1.1.6.tar.bz2打补丁其实就是对u-boot的源码做一些修改,这样就不用手动去修改u-boot了,这是百问网制作的补丁,更好的适配JZ2440开发板。-

2022-01-10 11:25:29 865

原创 【Linux】PC、Ubuntu、Linux开发板之间的ping问题

1、PC机使用网卡A连接开发板,虚拟机就设置网卡A为桥接网卡2、PC、Ubuntu、Linux开发板之间要处于同一个网段。如果开发板运行在u-boot下,就需要设置u-boot的IP,如果开发板运行在linux下,就需要设置linux的IP3、保证只有一条线路在PC和开发板之间传输...

2022-01-08 17:13:44 308

原创 【linux】使用u-boot更新Linux系统

0、前言linux系统一般由boot区、参数区、内核区、文件系统区组成。因此要安装一个linux系统,就需要先烧录boot,然后通过boot去下载内核、文件系统。一般情况下,下载完成以后还需要将参数区格式化。1、烧写u-boot请看上篇笔记2、使用u-boot下载linux内核2.1 进入u-boot接好串口,如果u-boot是烧录在NorFlash,就设置为Nor启动,如果烧录在NandFlash,就设置为Nand启动,然后给开发板重新上电,立刻按下空格键,进入u-boot2.2 安装USB

2022-01-08 16:42:45 898

原创 【Linux】JZ2440开发板u-boot烧录

1、安装EOP驱动EOP是Easy Open Jtag的简称,他就是一个调试器,和JLINK调试器类似。2、安装OpenOCD软件OpenOCD软件类似于JFlash软件,用来烧录的。3、命令行执行oflash,将u-boot烧录到NorFlash或者NandFlash的0地址oflash u-boot.bin4、开发板选择Nor启动或者Nand启动烧录到NorFlash就从Nor启动,烧录到Nandflash就从Nand启动5、拔掉EOP,接上串口,给开发板重新上电6、u-boot在启动

2022-01-08 15:48:51 785

原创 【Linux】压缩和解压命令

命令gzip功能递归查找符合条件的文件格式gzip [选项] 文件示例find ./ -name “*1.txt”常用选项说明-llist 列出压缩文件内容-kkeep 在压缩或者解压时,保留输入文件-ddecompress 将压缩文件进行解压缩...

2022-01-08 15:00:26 609

原创 【Linux】查找命令

1、find查找文件命令find功能递归查找符合条件的文件格式find [目录] [选项] [条件]示例find ./ -name “*1.txt”-name按照文件名查找-mtime -2查找2天内有变动的文件说明如果没有指定目录,则在当前路径查找2、grep查找字符串命令grep功能查找文件内符合条件的字符串格式grep [选项] [查找模式] [文件名]示例grep -rn “123” *

2022-01-06 23:52:02 431

原创 【Linux】vi编辑器的使用

1、文件打开、关闭、保存、退出按键操作功能vi 1.c打开1.c文件文件,如果文件不存在,则创建文件esc退出到一般模式i进入编辑模式:wq保存并退出:w保存不退出:q!退出不保存2、光标移动按键操作功能hjkl分别表示左下上右,j有点像向下的箭头,方便记忆gg跳到首行ngg跳到第n行G跳到最后一行0跳到当前行的第一列$跳到当前行的最后一列fx搜索当前行中第一次出现字

2022-01-06 21:46:54 520

原创 【C语言】冒泡排序法

#include <stdio.h>int main(){ int i, j, k, temp; int buffer[3] = {3,2,1}; /* 要求: 将数组按照从小到大的顺序进行排序 思路: 从第一个数开始,将每一个数和相邻的数进行比较,如果这个数比后一个数大,就交换他们的位置 第一轮排序就能选出最大的数,并且将它放在最后一个位置 第二轮排序就能选出第二大的数,并将它放在倒数第二个位置,这样从倒数第二个位置开始就是排序好的数 以此类推,直

2022-01-06 15:29:06 602

原创 【STM32】printf重定向到串口以及打印调试信息

//寄存器方式int fputc(int ch, FILE *f){ while((USART1->SR & USART_SR_TXE) == 0){} USART1->DR = ch; return ch;}//HAL库方式int fputc(int ch, FILE *f){ uint8_t temp = ch; HAL_UART_Transmit(&huart6, &temp, 1, 2); return ch;}//打印调试信息宏定

2021-11-04 11:47:45 260

原创 【RTOS】FreeRTOS+LwIP启动后网线再插入时,无法ping通的解决办法

1、确认STM32CubeMx打开了下面的宏定义2、void ethernetif_update_config(struct netif *netif)函数,新增以下代码为方便复制粘贴,代码如下 if(netif_is_link_up(netif)) { netif_set_up(netif); } else { netif_set_down(netif); }3、先上电等待系统启动以后,再插入网线,检查是否能ping通。...

2021-11-04 10:43:01 1002

原创 【C语言】二级指针的实例

#include "stdio.h"#include "stdlib.h"/* 示例1:通过二级指针在函数内部进行内存分配 */ void malloc_fun(int **p2){ *p2 = malloc(1);}void malloc_p1_test(void){ int *p1 = NULL; printf("示例1:通过二级指针在函数内部进行内存分配\r\n"); malloc_fun(&p1); if( p1 == NULL ) { prin

2021-10-15 17:25:57 1150

原创 【C语言】二级指针分析

假设有这样一段代码,p2指向p1,p1指向a,a就是一个普通的整型变量,a的值为100。void main(void){ int a = 100; int *p1 = &a; int **p2 = &p1;}假设a的地址为0x0000,p1的地址为0x0004,p2的地址为0x0008,那么就有这样一个表。变量p2p1a值0x00040x0000a地址0x00080x00040x0000对一级指针p1取值,就是*p1=*(0x

2021-10-15 14:30:38 523

原创 【RT-Thread】使用Scons管理自己的工程

起因在使用env进行构建工程的时候,如果是从MDK手动添加分组和源码,重新构建以后工程又恢复原来的样子了,极为不方便,因此就去RT-Thread的官网查找这方面的资料,果然找到了相关的教程,教程的连接如下:Scons。但是教程的篇幅较长,如果只是希望在工程中添加一些分组和源码,其实只需要简单的几步即可完成,因此本文作为一个使用笔记,能够让读者在不熟悉Scons的基础上快速将组和源码添加进入工程。如果读者需要理解Scons,可以看上面提到的链接,作为入门理解非常有帮助。需求根据上述的问题,本文的目标就是

2021-09-07 11:17:52 1838 1

原创 【AT32】如何使用JLINK连接雅特力MCU

1、需要下载官方的一个包,我这里是AT32F407,下载链接如下:https://www.arterytek.com/cn/product/AT32F407.jsp?t=1630033027307#Resource2、下载后安装即可

2021-08-27 11:02:45 5493 5

原创 【C#】委托

委托和C语言中的函数指针类似,可以通过以下方式声明一个委托类型:delegate <return type> <delegate-name> <parameter list>//例如声明一个返回值为整型,参数为字符串类型的委托类型,该类型的名字是RecvFrameCallbackdelegate int RecvFrameCallback(string s);以下是一个简单的委托例子,可以通过改变recvFrameCallback变量的值,来调用不同的函数us

2021-08-18 10:21:39 83

原创 【C#】UDP通信

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace UDPTest{ class Program { static void Main(string[] args) { // This constructor arbitrarily assigns the local port number.

2021-08-17 10:40:27 179

原创 【C#】多态

多态多态分为静态多态性和动态多态性静态多态性静态多态性通过函数重载和运算符重载实现函数重载:就是同一个函数名称,但是函数的参数不一样运算法运算符重载:略动态多态性动态多态性通过抽象类和虚方法实现抽象类:抽象类使用abstract关键字进行创建,抽象类里面包含抽象方法,抽象方法只进行定义而不实现,实现的事情交给该抽象类的子类进行,不同的子类对同一个抽象方法实现不同的功能,这样就可以实现多态。要实现多态,需要使用子类实例指向父类对象。我们来看下面这个例子。例子定义一个动物抽象类,动物的一个功能

2021-08-12 17:22:21 335

原创 【C#】如何将字符串转换为数组

using System;/* 控制台需要的命名空间 */using System.Text;/* 字符串转换为数组需要使用这个命名空间 */ class Program{ static void Main() { byte[] array = UTF8Encoding.UTF8.GetBytes(Console.ReadLine());//将获取到的字符串转换为字符数组 foreach (byte b in array) { Console.Write("0

2021-08-05 14:57:19 2348

原创 【C#】串口编程

使用C#实现简单的串口收发功能

2021-07-30 15:03:15 514

原创 【C#】无法使用using System.IO.Ports;命名空间

原因是需要安装一个包,安装方式如下:在命令行中输入以下命令然后回车等待安装完成即可:Install-Package Microsoft.Windows.Compatibility -Version 5.0.2

2021-07-29 15:35:20 2659 2

空空如也

空空如也

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

TA关注的人

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