<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[alwaystrust的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/alwaystrust</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; alwaystrust]]></copyright><item><title><![CDATA[迁移学习-微调策略]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/134973608</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/134973608</guid><author>alwaystrust</author><pubDate>Wed, 13 Dec 2023 16:02:15 +0800</pubDate><description><![CDATA[迁移学习是指调整预训练的神经网络并应用到新的不同数据集上。，以及使用迁移学习的方式将不同。包括以下四大情形：1.新数据集很小，新数据和原始训练数据相似2.新数据集很小，新数据和原始训练数据不同3.新数据集很大，新数据和原始训练数据相似4.新数据集很大，新数据和原始训练数据不同大型数据集可能有 100 万张图像。小型数据集可能有 2000 张图像。大型数据集和小型数据集的划分依据具有主观性。对小型数据集使用迁移学习时需要。小狗图像和狼图像属于相似的图像；它们具有共同的特征。]]></description><category></category></item><item><title><![CDATA[第三阶段：50-52.IO操控代码编程]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121723572</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121723572</guid><author>alwaystrust</author><pubDate>Sat, 04 Dec 2021 23:28:23 +0800</pubDate><description><![CDATA[5.2 寄存器地址配置(ioremap、volatile物理地址映射成虚拟地址)
①在原来框架的基础上，添加寄存器的定义
volatile unsigned int* GPFSEL0 = NULL;
volatile unsigned int* GPSET0  = NULL;
volatile unsigned int* GPCLR0  = NULL;

要想写出上面的代码，要掌握以下几点：

弄清楚寄存器的分组 其中寄存器的0表示的是分组，目标操作的IO是pin4,由文档可知，属于寄存器分组0。


vo]]></description><category></category></item><item><title><![CDATA[第三阶段：49.树莓派博通BCM2835芯片手册导读]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121690209</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121690209</guid><author>alwaystrust</author><pubDate>Fri, 03 Dec 2021 02:06:04 +0800</pubDate><description><![CDATA[基于简单字符设备驱动框架编写驱动代码驱动引脚
1.General Purpose I/O (GPIO)板块
查看芯片手册的目的性很强：做哪一块的开发，就只看那一块，现在要开发的是GPIO，熟悉控制IO口的寄存器最为重要。
如果看完这部分的文档，你对于以下几个问题（后面有解析）有清晰的答案，说明你真正读懂了这一部分的开发。

①操作逻辑：简言之就是怎么进行配置相关寄存器，这些配置步骤和思想其实都很类似。
②需要重点掌握的寄存器有哪些？例如输入 / 输出控制寄存器，输出 0 / 1控制寄存器，清除状态寄存器

]]></description><category></category></item><item><title><![CDATA[第三阶段：48.微机总线地址物理地址虚拟地址介绍]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121683000</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121683000</guid><author>alwaystrust</author><pubDate>Thu, 02 Dec 2021 18:31:57 +0800</pubDate><description><![CDATA[三种地址介绍
写驱动是为了操作IO口，实现自己的wiringpi库，跟硬件打交道。
首先要理解以下3个地址的概念：

4.1 总线地址
通俗来说：cpu能够访问的内存范围

现象：电脑装了32位（bit）的系统，明明内存条有8G，却只能识别3.8G左右，这是因为32位仅能表示/访问232=4,294,967,296bit=4,194,304Kb=4096Mb=4G左右。只有装了64位的，才能够识别到8G。32位、64位是计算机CPU一次处理数据能力的大小。

树莓派装载32位操作系统，寻址自然是4G。
树莓]]></description><category></category></item><item><title><![CDATA[第三阶段：43-47.树莓派基于Linux内核驱动开发]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121665997</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121665997</guid><author>alwaystrust</author><pubDate>Wed, 01 Dec 2021 22:54:47 +0800</pubDate><description><![CDATA[目录
一、驱动认知
1.1 为什么要学习写驱动
1.2 文件名与设备号
1.3 open函数打通上层到底层硬件的详细过程
二、基于框架编写驱动代码
2.1 编写上层应用代码
2.2 修改内核驱动框架代码
2.3 部分代码解读
2.3.1 static的作用
2.3.2 结构体成员变量赋值方式
2.3.3 结构体file_operations(最终加载到内核驱动链表)
2.3.4 手动生成设备
三、驱动代码编译和测试
3.1 驱动框架的模块编译并发送至树莓派
①Makefile内添加生成.o命令
②模块编译生]]></description><category></category></item><item><title><![CDATA[第三阶段：41-42.Linux内核结构介绍]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121623624</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121623624</guid><author>alwaystrust</author><pubDate>Tue, 30 Nov 2021 01:36:22 +0800</pubDate><description><![CDATA[目录
Linux内核结构框图
图解linux系统架构
shell
shell脚本
Linux内核结构框图
链接：https://www.cnblogs.com/haoyufeng/p/4434058.html
对内核结构框图有个总体的把握，有助于理解为什么驱动要这样写，为什么写的应用程序所用的C库接口能够产生这么多的事情。


函数库就像一个“黑匣子”，提供了一系列API支配内核运作，但你不知道内核发生了什么。


内核是一个很厉害的超级逻辑，把硬件底层的东西抽象化，对用户来说只需要调API就好了，根本不需]]></description><category></category></item><item><title><![CDATA[第三阶段：36-40.linux文件系统、文件系统结构、虚拟文件系统]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121601342</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121601342</guid><author>alwaystrust</author><pubDate>Mon, 29 Nov 2021 02:33:57 +0800</pubDate><description><![CDATA[目录
文件系统概述
学术定义
文件系统种类
什么是分区
简单理解windows和linux文件系统的区别
文件系统结构
/etc目录下可以设置开机启动程序
切换为root超级用户
/proc目录举例
绝对路径与相对路径
虚拟文件系统（Virtual File System）(VFS)
是什么？
有什么作用？
EG1：cp指令的实现
EG2：从系统编程，从上层到底层来看
1.文件系统概述
原文链接：https://www.cnblogs.com/ddz-linux/p/10458383.html#


2.文]]></description><category></category></item><item><title><![CDATA[第三阶段：35-36.树莓派Linux内核编译、Linux内核镜像拷贝至树莓派并启动新内核]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121586805</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121586805</guid><author>alwaystrust</author><pubDate>Sun, 28 Nov 2021 04:02:23 +0800</pubDate><description><![CDATA[树莓派Linux内核编译
为什么要配置编译？
因为：驱动代码的编写，驱动代码的编译需要一个提前编译好的内核，编译内核就必须配置，配置的最终目标会生成 .config文件，该文件指导Makefile去把有用东西组织成内核
厂家配linux内核源码，比如说买了树莓派，树莓派linux内核源码
第一种方式：cp 厂家.config .config。
第二种方式：make menuconfig 一项项配置，通常是基于厂家的config来配置。
第三种方式：完全自己来。

编译指令：
ARCH=arm CROSS_C]]></description><category></category></item><item><title><![CDATA[第三阶段：34.配置Linux内核适合树莓派相关操作]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121574707</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121574707</guid><author>alwaystrust</author><pubDate>Sat, 27 Nov 2021 11:57:31 +0800</pubDate><description><![CDATA[目录
树莓派Linux源码配置(适合树莓派)
总体概述
配置的三种方式
1.照搬厂家的配置（使用这种方式）
2.参考厂家的配置（感受一下）
3.完全自主配置（需要一定工作经验）
树莓派Linux源码配置(适合树莓派)
总体概述

配置的三种方式
参照博文（一般厂家会给到这样的操作手册，没有就凉凉了，玩不了）：http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan]]></description><category></category></item><item><title><![CDATA[第三阶段：33.树莓派内核开发准备（内核源码获取、启动过程、源码目录树）]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121540755</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121540755</guid><author>alwaystrust</author><pubDate>Thu, 25 Nov 2021 16:36:24 +0800</pubDate><description><![CDATA[目录
1.交叉编译工具的安装
2.内核源码获取
3.嵌入式设备带操作系统的启动过程扫盲
4.Linux内核源码树扫盲
（1）内核源码简介
（2）Linux内核源代码目录树结构
{a.tree指令查看；b.内核源码目录树}
1.交叉编译工具的安装
23-28交叉编译
2.内核源码获取
下载哪个版本取决于树莓派的版本，用命令查看
uname -r


官网下载方式（方便以后下载树莓派其他内核版本）：
官网地址：https://github.com/raspberrypi/

3.嵌入式设备带操作系统的启动过程扫]]></description><category></category></item><item><title><![CDATA[第三阶段：23-28.树莓派交叉编译]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121462226</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121462226</guid><author>alwaystrust</author><pubDate>Sun, 21 Nov 2021 22:50:48 +0800</pubDate><description><![CDATA[1.什么是交叉编译
编译：是在一个平台上生成该平台上的可执行代码。
交叉编译是在一个平台上生成另一个平台上的可执行代码。
比如：
&lt;1&gt; C51的交叉编译的发生在keil（集成环境上面）
&lt;2&gt; 我们在windows上面编写C51的代码，并编译成可执行代码，如：xxx.hex，是在C51上面运行，不是在windows上面运行
&lt;3&gt; 我们在ubuntu上面编写树莓派的代码，并编译成可执行代码，如：a.out，是在树莓派上面运行，不是在ubuntu Linux上面运行
2.]]></description><category></category></item><item><title><![CDATA[第三阶段：语音模块1——7]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121433132</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121433132</guid><author>alwaystrust</author><pubDate>Sat, 20 Nov 2021 00:07:27 +0800</pubDate><description><![CDATA[目录
硬件模块化开发的行情
LD3320语音模块使用手册介绍：
语音模块验货测试
测试结果良好
Source Insight代码查看器
创建工程
修改字体
配色方案
中文乱码
关联代码
语音识别模块代码分析
语音识别模块二次开发
硬件模块化开发的行情

LD3320语音模块使用手册介绍：
通信方式：串口通信（5VTTL电平（为主），RS232，R,485）



语音模块验货测试


Source Insight代码查看器
创建工程
注意：使用这个查看代码可能会破坏代码，要用代码需要提前备份或重新解压。
1]]></description><category></category></item><item><title><![CDATA[第三阶段：20.树莓派和电脑之间串口通信编程]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121420241</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121420241</guid><author>alwaystrust</author><pubDate>Fri, 19 Nov 2021 13:11:50 +0800</pubDate><description><![CDATA[1.使用串口通信时需包含头文件 #include&lt;wiringSerial.h&gt;
2.注意：初次使用树莓派串口编程，需要配置
链接：https://www.cnblogs.com/lulipro/p/5992172.html
修改cmdline.txt文件
输入指令：sudo vi /boot/cmdline.txt
删除：console=serial0,115200
修改完记得：sudo reboot 重启树莓派
3.相关的API
&lt;1&gt; int serialOpen (char ]]></description><category></category></item><item><title><![CDATA[第三阶段：15.树莓派控制单个继电器]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121369304</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121369304</guid><author>alwaystrust</author><pubDate>Wed, 17 Nov 2021 01:24:50 +0800</pubDate><description><![CDATA[树莓派库（wiringPi）详解：
https://www.cnblogs.com/lulipro/p/5992172.html
继电器：电源 vcc 是 3.3V
#include &lt;wiringPi.h&gt;
#include &lt;stdio.h&gt;
 
#define SWITCHER 7      //宏定义：给引脚7一个名字                       
 
int main()
{
        int cmd;
 
        if(wiringPiSet]]></description><category></category></item><item><title><![CDATA[第三阶段：14.树莓派外设开发编程]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121368669</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121368669</guid><author>alwaystrust</author><pubDate>Wed, 17 Nov 2021 00:26:46 +0800</pubDate><description><![CDATA[树莓派外设开发接口文档参考
wiringPi（特定平台，特定功能接口）         库（linux   动态库.so    静态库.a）
https://www.cnblogs.com/lulipro/p/5992172.html


树莓派的接口：驱动
IO口：      input    output   对主控芯片来说
Input：     烟雾，火焰，震动，人体 等传感器
Output：  继电器，蜂鸣器
PWM：    电机调速，灯光调明亮度
串口 uart：
IIC：
SPI：
IIS：
其]]></description><category></category></item><item><title><![CDATA[第三阶段：12.linux库之动态库生成和使用]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121347369</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121347369</guid><author>alwaystrust</author><pubDate>Tue, 16 Nov 2021 02:16:26 +0800</pubDate><description><![CDATA[2.动态库的制作：
gcc -shared -fpic testfunc.c -o libcalc.so
//生成 libxxx.so （动态库）文件
-shared 指定生成动态库
-fpic 标准，fPIC 选项作用于编译阶段,在生成目标文件时就得使用该选项,以生成位置无关的代码。
3.动态库的使用（与静态库一样）：
gcc test.c -lcalc -L . //libcalc.so   动态库库名砍头去尾
生成的可执行文件a.out不能直接运行，提示没有这个文件，此时需要指定动态库位置

引用动态]]></description><category></category></item><item><title><![CDATA[第三阶段：11.linux库之静态库的生成和使用]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/121347183</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/121347183</guid><author>alwaystrust</author><pubDate>Tue, 16 Nov 2021 01:17:42 +0800</pubDate><description><![CDATA[11.linux库之静态库的生成和使用
1、库
参考博文：
https://www.cnblogs.com/sunsky303/p/7731911.html
https://blog.youkuaiyun.com/wk_bjut_edu_cn/article/details/81735956
介绍：
    使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据，这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化，]]></description><category></category></item><item><title><![CDATA[2021-10-14 Linux系统编程10.文件编程小应用之【修改程序的配置文件】]]></title><link>https://blog.youkuaiyun.com/alwaystrust/article/details/120755973</link><guid>https://blog.youkuaiyun.com/alwaystrust/article/details/120755973</guid><author>alwaystrust</author><pubDate>Thu, 14 Oct 2021 02:07:07 +0800</pubDate><description><![CDATA[10.文件编程小应用之【修改程序的配置文件】
转载：沈上青灯
编程思路：
利用main参数（main参数的简解）
打开要修改的文件
将要修改文件的内容读到 buf
利用字符串API之strstr( ) 找到要修改的子串的位置，修改内容
将修改后的buf写回源文件
close关闭文件
#include &lt;sys/types.h&gt;
#include &lt;sys/stat.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;stdio.h&gt;
#includ]]></description><category></category></item></channel></rss>