<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bai_3525的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bai_3525</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bai_3525]]></copyright><item><title><![CDATA[Linux应用(五)必备小技能{动态库与静态库}]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125332340</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125332340</guid><author>bai_3525</author><pubDate>Fri, 01 Jul 2022 20:23:25 +0800</pubDate><description><![CDATA[如果是初学者，建议先跳过概念，对比什么的，直接看库的生成和使用，直接看用法才是初学的正确姿势；概念什么的都是复习，深入理解才要看的；天启四骑士：我愿理解为：预处理所有#代码，把所有C文件编译成汇编文件，把所有汇编文件汇编成二进制可执行文件，最后把所有二进制文件链接在一起形成一个文件；
也就是说，在Linux中，命令ldd+可执行文件名，即可查看这个文件依赖的所有库；在用file+文件名，可以查看每个库的具体信息，可知是静态库还是动态库；当然在Linux当中，以.so为后缀的是动态库，以.a为后缀的是静态库，]]></description><category></category></item><item><title><![CDATA[Linux应用(四)socket网络编程]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125316735</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125316735</guid><author>bai_3525</author><pubDate>Sat, 25 Jun 2022 12:39:28 +0800</pubDate><description><![CDATA[如果你想看编程接口，请不要看这章，本章内容繁杂直接劝退；socket有流式SOCK_STREAM和数据报SOCK_DGRAM两种，前者用于TCP模型，后者用于UDP模型；是一种可靠的、双向的通信数据流，TCP协议能够使数据可以准确无误地到达另一台计算机，如果损坏或丢失，可以重新发送；
SOCK_STREAM 有以下几个特征：
数据在传输过程中不会消失；
数据是按照顺序传输的；
数据的发送和接收不是同步的（有的教程也称“不存在数据边界”）。数据报套接字是一种不可靠的、不按顺序传递的、以追求速度为目的的套接字
]]></description><category></category></item><item><title><![CDATA[linux应用(三)多线程编程]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125237083</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125237083</guid><author>bai_3525</author><pubDate>Sat, 25 Jun 2022 12:39:01 +0800</pubDate><description><![CDATA[想要编程来让linux系统“同时”执行多个任务，一种方法是使用多进程，也就是我在执行一个程序，哎，我又开一个程序，操作系统你让它俩“同时”运行；这种方式可以，但进程间的切换开销大，通信和同步较为复杂，不合适；我想实现的是，就开一个程序，这个程序的不同代码段可以“同时”运行；这就要用到多线程；线程是轻量级的进程；
进程是程序的一次动态执行，但是真正执行代码的是线程；操作系统为进程分配资源，进程中的线程来执行任务代码；一个进程至少包含一个线程，即主线程；其他线程(代码创建出来的)为子线程；
注：线程库不在lin]]></description><category></category></item><item><title><![CDATA[Linux应用(二)多进程编程]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125266130</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125266130</guid><author>bai_3525</author><pubDate>Sat, 25 Jun 2022 12:38:05 +0800</pubDate><description><![CDATA[进程是程序的一次动态执行过程，是程序执行和资源管理的最小单位  。程序是静态的，是一些保存在磁盘上的指令的有序集合，没有任何执行的概念；
进程是一个动态的概念，它是程序执行的过程，包括创建、调度和消亡；注意：程序一旦被运行，就会产生一个进程，并且会被每一个进程分配一个0-4G（32OS下）的内存空间，分配空间大小和操作系统的位数有关。32位系统可以对应232 个地址，那么就有232 字节=4X1024X1024X1024个字节；
C语言内存分配图：

进程控制块（pcb)：PID，进程用户, 进程优先级，文]]></description><category></category></item><item><title><![CDATA[Linux应用(一)文件与IO]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125336212</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125336212</guid><author>bai_3525</author><pubDate>Sat, 25 Jun 2022 12:12:28 +0800</pubDate><description><![CDATA[常规文件 r
目录文件 d
字符设备文件 c
块设备文件 b
管道文件 p
套接字文件 s
符号链接文件 l系统调用就是操作系统提供的接口函数。
如果我们把系统调用封装成库函数就可以起到隔离的作用，提高程序的可移植性。
Printf就是库函数然后调用了系统调用才在显示器上显示字符。标准I/O由ANSI C标准定义，标准I/O通过缓冲机制减少系统调用，实现更高的效率有三个预定义的流，在每个进程中自动创建：
stdin；stdout；stderr；它们都是FILE流结构体；打开文件：
返回值：出错返回NULL，]]></description><category></category></item><item><title><![CDATA[嵌入式arm(六)关于中断和按键中断示例]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125105498</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125105498</guid><author>bai_3525</author><pubDate>Fri, 03 Jun 2022 16:29:25 +0800</pubDate><description><![CDATA[本文只供参考按键中断程序示例，arm裸机编程始终不是最终的目标，能够完成简单的外设驱动，能理解裸机编程流程即可，要不求甚解，最后的目标还是系统移植，还是在linux下编程，所以不要对学不会裸机编程过于烦躁。
异常的相关概念和响应，到底哪个放在前面好理解呢？我认为先知道异常的相应原理再去看概念容易被接受，但是不知道有哪些概念，又无法知道响应时到底在干嘛。所以本文还是按先概念再相应原理的顺序来安排，但是本文读者应该是有基础的开发者，因此可以自由翻阅，或者先大致浏览概念，仔细看过异常相应之后再来详细看概念。概述：]]></description><category></category></item><item><title><![CDATA[嵌入式arm(五)裸机编程之简单的使用{看门狗}{PWM}{ADC}快速练习]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125047821</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125047821</guid><author>bai_3525</author><pubDate>Fri, 03 Jun 2022 16:29:10 +0800</pubDate><description><![CDATA[使用开发板：FS4412，Soc：Exynos4412，内核型号：cortex-A9，架构：armv7；
文档：开发板原理图，Soc数据手册；
环境：文件编写及编译：Linux；下载程序：超级终端hypertrm；串口下载
编译器：交叉编译器arm文章目录一 看门狗定时器1 什么是看门狗定时器1.1 看门狗是啥？1.2 看门狗有什么用？2 看门狗的使用2.1 查硬件电路2.2 查寄存器2.3 编程二 PWM驱动无源蜂鸣器1 粗略提一点概念2 查硬件电路3 查寄存器4 编程三 ADC的简单使用1 简单描述2 ]]></description><category></category></item><item><title><![CDATA[嵌入式arm(四)arm的UART串口知识与裸机编程]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/125020087</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/125020087</guid><author>bai_3525</author><pubDate>Sat, 28 May 2022 23:52:07 +0800</pubDate><description><![CDATA[文章目录1 UART知识1.1 概念1.2 单工、半双工、全双工1.3 同步和异步1.4 串口通讯协议1.4.1 通信协议1.4.2 串口通讯帧数据格式1.5 波特率1.6 Soc中的串口框图2 UART裸机编程流程2.1 整体流程2.2 看原理图，查引脚2.3 看数据手册，查寄存器用法2.3.1 查GPIO2.3.2 查UART相关寄存器2.4 用C语言来编程2.4.1 使用串口向上位机发送数据2.4.2 使用串口回显并控制灯的亮灭
1 UART知识
1.1 概念
Universal Asynchrono]]></description><category></category></item><item><title><![CDATA[嵌入式arm(二)涉及的汇编指令及相关知识]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124941728</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124941728</guid><author>bai_3525</author><pubDate>Sat, 28 May 2022 15:49:22 +0800</pubDate><description><![CDATA[arm开发中需要掌握一些汇编语言的知识，如：指令的格式，作用和用法；但不是要求用汇编去编程，而是通过学习汇编来掌握：机器指令的格式，指令在内存中是如何存储的，指令的执行过程，寄存器的变化。
文章目录一 汇编语言是什么二 汇编语言的注释三 汇编语言的基本语法1、
一 汇编语言是什么
二 汇编语言的注释
用@注释符；
三 汇编语言的基本语法
1、

...]]></description><category></category></item><item><title><![CDATA[嵌入式arm(三)arm裸机程序点灯+流水灯+环境文件解释]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124991367</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124991367</guid><author>bai_3525</author><pubDate>Fri, 27 May 2022 10:54:52 +0800</pubDate><description><![CDATA[本节我们用点灯来体验一下arm的裸机程序开发；
cortex文章目录一 环境介绍二 简略了解SFR特殊功能寄存器三 裸机开发点灯的流程1 看硬件的原理图2 查手册配置Soc的引脚3 编程四 点灯1 查原理图1.1 查引脚连接1.2 看驱动方式2 查手册2.1 查找到的信息2.2 查找过程(手册截图)2.2.1 GPX1_02.2.2 GPF3_4、GPF3_53 编程3.1 点灯的C文件3.2 Makefile文件3.3 start.s文件3.4 map.lds
一 环境介绍
使用开发板：FS4412，So]]></description><category></category></item><item><title><![CDATA[嵌入式arm(一)学ARM要掌握的预备知识(本篇文章持续更新)]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124933559</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124933559</guid><author>bai_3525</author><pubDate>Tue, 24 May 2022 00:08:46 +0800</pubDate><description><![CDATA[文章目录一 关于arm1 arm的三种含义2 两种指令集2.1 CISC2.2 RISC3 arm公司4 arm型号4.1 什么是soc4.2 cortex二 计算机系统基本组成1 总述2 通过公交车理解总线3 两种总线结构3.1 单总线结构3.2 多总线结构3.2.1 DMA3.2.2 AHB高速总线   APB（外设）总线3.2.3 高速缓冲器cache4两种FlashNorFlashNandFlash
一 关于arm
1 arm的三种含义
(1) 一个公司的名称  Advanced  RISC  Ma]]></description><category></category></item><item><title><![CDATA[python基础(阅读需要C&C++基础){注释}{input}{切片}{基本数据类型}]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124784648</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124784648</guid><author>bai_3525</author><pubDate>Sun, 22 May 2022 23:34:24 +0800</pubDate><description><![CDATA[文章目录一 python注释二 input()1 返回的值是string类型，运算需要强转1.1 输入时强转1.2 运算时强转2 提示字符串2.1 input里只能放一个参数3 一次性输入多个变量3.1 用split()获得字符串列表3.2 用map() 一次性强转列表三 切片1 python中的索引1.1 正向索引1.2 负向索引2 怎么切片/切片的表达式2.1 操作会切出包含起始元素，不包含终止元素的序列，2.2 索引方向和步进方向的问题2.2.1 两个索引的正负一样2.2.2 两个索引的正负不一样2.]]></description><category></category></item><item><title><![CDATA[C++多态中的动态多态：虚函数(前置要求：掌握C++基本语法)]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124335625</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124335625</guid><author>bai_3525</author><pubDate>Sun, 22 May 2022 23:32:08 +0800</pubDate><description><![CDATA[文章目录概念(复习用)什么是多态什么是虚函数怎么实现(多态)多态代码及讲解(学习用)虚函数工作原理参考
概念(复习用)
什么是多态
多态：在面向对象编程中，一种接口(函数)的多种实现(函数内容，作用域)即为多态；多态分静态和动态；静态是指在编译时就可以确定选择哪种实现，动态是运行时才确定选择哪种实现；
静态有函数重载和泛型编程，如add()根据数据类型重载，在编译时就能选好哪一个；动态是虚函数，比如父类和子类中有同名函数delete_data()，在运行时通过基类指针指向的不同对象来选择到底调用哪个；
C+]]></description><category></category></item><item><title><![CDATA[C++的重载函数和重载运算符(前置要求：掌握C语言)]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124309905</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124309905</guid><author>bai_3525</author><pubDate>Sun, 22 May 2022 23:31:52 +0800</pubDate><description><![CDATA[文章目录一  为什么引入重载（一）函数重载（二）运算符的重载二  重载的定义（一）函数重载（二）运算符重载三  重载的代码举例（一）函数重载一点注意事项（二）运算符重载四  重载原理（一）函数重载原理五  参考
一  为什么引入重载
（一）函数重载
对于功能相同但是处理的数据类型不同时，我们需要针对不同类型分别写不同函数；但是C语言中函数名不能重复，还需要花式起不同的名字；
比如两个数相加的函数，int和int，int和flo]]></description><category></category></item><item><title><![CDATA[C++中的etc__C语言语法扩展{默认参数}&{new和delete}&{命名空间}\\\(前置要求：掌握C语言)]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124311189</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124311189</guid><author>bai_3525</author><pubDate>Sun, 22 May 2022 23:30:51 +0800</pubDate><description><![CDATA[文章目录一 默认参数1、理解定义2、注意点二 new &amp; delete
一 默认参数
1、理解定义
在定义函数时，可以在形参后面加上赋值；表示这个形参有一个默认值，如果调用函数时不传实参，则形参取默认值；
#include &lt;iostream&gt;
using namespace std;
int add(int a = 1, int b = 2)
{
    return a+b;
}
int main()
{
   cout &lt;&lt; add() &lt;&lt; endl;;
]]></description><category></category></item><item><title><![CDATA[C++基础__类的基本组成{访问权限}{this指针}{构造函数}{析构函数}{static静态成员}]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124547828</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124547828</guid><author>bai_3525</author><pubDate>Sun, 22 May 2022 23:29:53 +0800</pubDate><description><![CDATA[文章目录一 this指针类成员初始化问题：方案一：不在构造函数中初始化，而在主函数中访问；方案二：使用this指针二 构造函数
一 this指针
在一个类中有成员变量和成员函数，在成员函数中，因为无法在定义类的时候事先知道实例化对象的对象名，也就无法对将来的对象操作，也就是说，类定义一个对象，在这个对象的成员函数中无法操作对象本身。例如
类成员初始化问题：
先看下面的代码
using namespace std;
class a
{
public:
    int b;
    a(int b)
    {]]></description><category></category></item><item><title><![CDATA[C++中“引用”的使用说明(前置要求：掌握C语言)]]></title><link>https://blog.youkuaiyun.com/bai_3525/article/details/124202675</link><guid>https://blog.youkuaiyun.com/bai_3525/article/details/124202675</guid><author>bai_3525</author><pubDate>Wed, 20 Apr 2022 19:45:42 +0800</pubDate><description><![CDATA[1、引用是变量的别名，没有新变量，只是多了一个新的名字；
我的理解是：定义一个变量，是向内存中申请一块空间，比如int a；则申请一块int类型大小的空间，这个空间有一个地址，用a这个名字去映射这个地址，于是使用a就能操作这个地址上的数据，
看下面的代码，先定义变量a；再定义b引用a；再定义c引用b；
#include &lt;iostream&gt;
using namespace std;

int main()
{
    int a = 10;
    int &amp;b = a;
    int]]></description><category></category></item></channel></rss>