2024年8月

如果有人问我什么算法?我就一句话:算法就是对一类问题的最优求解路径。

1、计算机领域的算法概念

算法一直都是计算机领域非常重要的概念,具备极高的地位,各个公司对算法的考察也非常热衷。

我们只有在数学、计算机和人工智能领域会听到算法的概念,再加上似乎没人能讲清楚算法的概念。所以,一听到算法,很多人以为是个高深概念。

在计算机科学中,算法是指一个被定义好的、计算机可施行其指示的有限步骤或次序,常用于计算、数据处理和自动推理。

简单来说,算法就是一个定义明确的步骤集合,用来解决特定问题或执行特定任务。或者说算法是一种解决问题的方法,它通过一系列的步骤,逐步达到目标。

在编程中,算法被用来处理数据、执行计算、自动推理和做出决策。

我们常用的公共类算法很多,比如:

  • 排序算法
    :如快速排序、冒泡排序等,用于将数据按特定顺序排列。
  • 搜索算法
    :如二分查找,用于在数据集中找到特定元素。
  • 加密算法
    :如AES、RSA,用于数据加密和解密。
  • 路径规划算法
    :如Dijkstra算法,用于寻找最短路径。

2、算法只存在于计算机领域吗

我们基本只会在数学和计算机领域听过算法的概念,提到“算法”,很多人的第一反应是复杂的数学公式或计算机程序。那其他领域存在算法吗?

我的观点是,算法并不仅仅存在于科技领域,各个领域都存在算法。

为什么?因为算法是一个通用概念,它是一种解决问题的思维方式,它帮助我们理清思路,找到最优的解决方案。

算法说白了就是:
对一类问题的最优求解路径

每个行业都存在各种各样的问题,每个问题都有对应的解决方法和步骤。有问题,有沉淀下来的解决路径,这不就是算法嘛。

所以每个行业都存在算法。我们不要把算法想的那么高深。

3、生活中的算法

比如在日常生活中,无论是农民在田间播种,还是建筑师设计大楼,甚至是我们在解决生活中的问题时,算法都无处不在。

农民种地的算法
:农民要种出好的麦子,这个过程就是一个算法。首先,需要选择合适的种子,这是输入;然后,要根据天气、土壤和季节来决定何时播种,这相当于判断条件;最后,经过施肥、浇水、除草等一系列步骤,农民收获了粮食。这就是一个完整的算法过程。

建筑师的算法
:建筑师设计一栋坚固的房子也是在执行一套算法。从选择建筑材料,到规划结构,再到每一个房间的布局,每一个步骤都是为了最终目标服务的。

日常生活中的算法
:就连你早晨起床的过程也可以看作一个算法。你可能会在心里梳理一个步骤:起床、刷牙、洗脸、吃早餐、出门。这些看似简单的步骤,背后都有一个潜在的逻辑顺序,确保你能够顺利开始新的一天。

社会的算法
:在社会中,规则和法律也是一种算法。它们帮助我们解决各种社会问题,维护秩序。比如,交通规则就是为了避免混乱和事故的一套算法;教育体系则是为了培养人才的一种算法。

程序员的算法
:对于编程领域的算法,有两点说明:

  • 对于编程来说,编写高效的代码就是在执行算法。从需求分析到设计,再到编码、测试,每一步都是有目的、有方向的。
  • 为什么正常情况下我们不提“算法”俩字呢?因为常规的编码复杂度不高,在程序员的心目中低复杂度的流程和步骤还不足以称之为“算法”。但实际上简单的流程和步骤也是算法。

4、完结

算法就是对一类问题的最优求解路径,它存在于各行各业,无处不在。

本篇完结!欢迎 关注、加V(yclxiao)交流、全网可搜(程序员半支烟)

原文链接:
https://mp.weixin.qq.com/s/s7pS_HUKjmfb-dNnHOyuBQ

1、引言

随着人工智能和自动驾驶技术的飞速发展,自动驾驶车辆的研究和开发成为了科技领域的热点。对于初学者、爱好者和学生而言,一款易于上手且功能强大的自动驾驶平台显得尤为重要。Donkeycar正是这样一款开源项目,它提供了一个轻量级、模块化的Python自驾车库,旨在促进快速实验和社区参与。本文将详细介绍Donkeycar的技术特点、应用场景以及如何构建和使用这一平台。

2、Donkeycar介绍

Donkeycar
是一个专为爱好者和学生设计的自动驾驶小车平台,它不仅仅是一个Python库,更是一个完整的自驾小车构建生态系统。该平台基于Python,集成了多种开源技术和硬件,如
Keras

TensorFlow

OpenCV
以及
Raspberry Pi
等,使得用户能够轻松构建和测试自己的自动驾驶小车。

技术特点

  • 模块化设计:Donkeycar允许用户自由组合不同的硬件和软件模块,快速实现功能迭代。这种设计极大地提高了系统的灵活性和可扩展性。
  • 易于实验:友好的API接口和详尽的文档使得用户能够快速上手并进行实验。无论是初学者还是有一定经验的开发者,都能在短时间内掌握Donkeycar的使用方法。
  • 社区支持:Donkeycar拥有一个活跃的社区,用户可以在这里交流经验、共享资源,并获得实时支持。这种社区驱动的方式促进了技术的快速进步和普及。
  • 多种驾驶方式:Donkeycar支持多种驾驶方式,包括通过网页、游戏控制器或RC遥控器远程控制,提供了极大的灵活性。

使用的技术栈

  • Keras:基于Python的深度学习库,支持快速实验和原型设计。Keras可以以TensorFlow、CNTK或Theano作为后端运行,支持卷积神经网络和循环神经网络等。
  • TensorFlow:深度学习工具,用于构建和训练神经网络模型。
  • OpenCV:机器视觉库,用于实时图像处理、计算机视觉和模式识别。
  • Tornado:高性能Web框架和异步网络库,用于处理网络通信。
  • Raspberry Pi:开源硬件平台,为Donkeycar提供了强大的计算能力和灵活的接口。

3、构建Donkeycar自动驾驶小车

构建Donkeycar自动驾驶小车需要准备以下硬件:

  • Raspberry Pi(推荐Raspberry Pi 4)
  • 广角摄像头(用于图像采集)
  • 电机速度控制器(PWM控制)
  • 转向伺服系统(如9g舵机)
  • 有刷电机驱动
  • 传感器(如陀螺仪、加速度计等,可选)
  • 遥控车底盘(如大脚车)

软件安装与配置:

  • 安装Raspberry Pi操作系统:在Raspberry Pi上安装Debian 8.0系统,并配置网络连接。
  • 安装Donkeycar软件:从GitHub下载Donkeycar的源码,并按照官方文档进行安装和配置。
  • 连接硬件:将摄像头、电机速度控制器、转向伺服系统等硬件连接到Raspberry Pi上,并配置相应的驱动程序。

调试与校准:

  • 校准转向和油门:通过运行Donkeycar提供的校准工具,对转向和油门进行校准,确保小车能够准确响应控制指令。
  • 测试图像采集:启动Donkeycar的图像采集功能,检查摄像头是否能够正常工作并传输清晰的图像。
  • 远程控制测试:通过网页、游戏控制器或RC遥控器远程控制小车,测试其响应速度和稳定性。

4、应用场景

Donkeycar的应用场景非常广泛,包括但不限于以下几个方面:

  • 学习自动驾驶基础:Donkeycar为初学者提供了一个理想的平台,通过构建和测试自己的自动驾驶小车,可以深入了解自动驾驶的基本原理和技术。
  • 参加自动驾驶比赛:Donkeycar的灵活性和可扩展性使得它成为参加自动驾驶比赛的理想选择。用户可以根据自己的需求对小车进行定制和优化,以在比赛中取得更好的成绩。
  • 计算机视觉与神经网络算法试验:Donkeycar支持多种计算机视觉和神经网络算法,用户可以在此平台上进行试验和验证,以探索新的技术和方法。
  • 传感器数据收集与分析:通过Donkeycar平台,用户可以收集和分析传感器数据,以优化小车的性能和表现。

5、小结

Donkeycar
作为一款开源的Python自动驾驶库,为爱好者和学生提供了一个易于上手且功能强大的自动驾驶小车平台。通过模块化设计、易于实验和社区支持等特点,Donkeycar极大地降低了自动驾驶技术的门槛,使得更多人能够参与到这一领域的研究和开发中来。无论你是初学者还是有一定经验的开发者,Donkeycar都是一个不容错过的开源项目。

​项目地址:
https://github.com/autorope/donkeycar

Mono 官网主页
[1]和 Mono
GitHub 页面今日发布公告
[2],微软宣布将 Mono 项目移交给 WineHQ 组织,也就是 Linux 兼容 Windows 应用框架 Wine 的开发团队。

image

微软从 2014 年开始向.NET 开源发展,
当时微软宣布.NET Core即将开源
[3]。然而,在此之前,.NET 就已经有了一个名为 Mono 的开源计划。 Mono 项目始于 2001 年,最初它主要致力于为 Linux 桌面应用程序建立一个.NET 开发平台。第一次正式版本是在 2003 年发布的,此后该项目逐渐演进为在多个平台和操作系统上支持.NET。 这一事件标明微软将Mono 的现代化改造的工作已经完成,是一个里程碑事件。Wine 是一款免费和开源的兼容层,其中就包含 Mono 引擎。它使得在运行 Linux、FreeBSD 或其他一些操作系统的计算机上运行一些 Windows 应用程序成为可能。它也是 Valve 用来让 Steam Deck 用户在 Linux 驱动的手持设备上玩 Windows 游戏的 Proton 软件的基础。目前 Mono 项目已经移交到了 WineHQ 官网 Gitlab 页面:
https://gitlab.winehq.org/wine-mono/mono[4
]。

Mono 是基于.NET Framework 的,.NET Framework 是作为 Windows 一部分发布的.NET 大版本。经过多年的发展,Mono 和.NET 都可以应用在不同的环境中。在.NET 领域中,这最终导致了.NET Core 3+(这是所有未来工作和创新的基础)的发布,而.NET Framework 是一个长期维护的版本,它将继续被修复和调整。 但不会有任何重大的创新。

在 Mono 的世界里,运行时演进为支持我们所谓的“移动配置文件”,它是 API 的一个精选子集,适用于平衡用户需求与降低独立运行时部署的需求。这是 Xamarin .NET 努力的基础,也是最近 WebAssembly 工作的基础。

使用.NET 的不同场景以及使用它们的环境将开发人员必须使用的 API 集合分割开了。对于开发人员来说,没有一种简单的方法可以发布在所有平台上都可以工作的库二进制文件。

创建能够适用于所有不同环境的二进制库的愿望是创建.NET 标准的推动力——一个 API 的通用界面,可以在所有不同版本的.NET 上工作,无论是小型设备、移动系统,还是大型服务器。我们在这里所采取的方法是提出一套在所有平台上都可以平等使用的 API。但这仍然意味着我们要维护库的不同实现。

2020年发布的.NET 5完成了.NET Framework、Mono和.NET Core的统一工作,整个生态的统一工作现在还在继续,这一事件标明在运行时层面已经完成了CoreCLR 和 Mono 的统一,上层的库使用同一套API。统一了类库的实现,同时为用户提供了两种运行时选项。在较高的层次上,在 CoreCLR 中具有一个高吞吐量、高性能的运行时,还具有一个轻量级(但速度没有那么快)的 Mono 运行时。每个运行时都已针对它们最常使用的工作负载进行了调整:CoreCLR 用于服务器和桌面应用程序;Mono 用于移动和轻量级应用程序,例如 WebAssembly。可以在我们支持的所有平台上执行 C#或 F#代码。在某些平台上,用户将能够选择他们想要使用的运行时,而在其他平台上,将只有一个运行时可以使用。例如,对于 Windows 上的桌面应用程序,只有 CoreCLR 运行时适用,而对于 iOS,只有 Mono 运行时可用。

下个月.NET 9将发布RC版本,它将于年底在 .NET Conf 2024 上发布。我们最关注的领域是云原生和智能应用程序开发。现在 .NET 是可以并行安装了,并且可以按照用户需要的频率进行升级,我们有了千载难逢的机会来共同演进语言和运行时,而且你已经可以看到其中的一些东西了。


相关链接:

嵌入式STM32单片机开发环境配置教学Win/Mac

· 本教程支持Windows和Mac

· Windows可选的开发软件为Keil、Clion、STM32CubeMX,可自由选择开发方式

· Mac的开发环境为(Clion+OpenOCD+STM32CubeMX),仅支持HAL库

Windows配置教程

在Windows上面开发Stm32有多种工具组合,可以单纯使用Keil进行库函数、Hal库以及寄存器的开发,也可以通过Stm32CubeMX配合Keil开发STM32的Hal库,也可以使用CLion+OpenOCD+STM32CubeMX的组合来更现代化的开发Hal库,每种方式都有其优点,读者可以任意选择一个更加适合自己的开发方式,笔者使用的是第三种也就是CLion+OpenOCD+STM32CubeMX的组合,本章节中除了会讲述软件和环境的安装配置还会对每种开发方式中相关软件工程文件的使用配置进行基本的概述。

Keil5配置教程

需要的安装包下载地址:Keil5配置包.zip
​        链接:
https://pan.baidu.com/s/1joWgDoV7qujdAT3Jack0_w?pwd=nbvw
​        提取码:nbvw

一、软件介绍

Microcontroller Development Kit(简称 MDK),是 ARM 旗下公司 Keil 为 ARM 系列单片机 开发的一款便捷的开发工具,支持市面上绝大部分的单片机系列。

二、环境配置注意事项!!!

1.
安装的所有路径都不用能有中文出现!!

2. 在配置环境前请将电脑上的所有!
注意是所有!
的杀毒软件全部关掉包括Windows自带的安全中心也全部关掉!!!

Windows安全中心关闭方法:

· 点击"设置">"隐私与安全性">"Windows安全中心">"打开Windows安全中心"

· 依次点击"病毒和威胁防护"、"防火墙和网络保护",关闭里面的保护内容即可

3. 下载解压后文件夹里应该有以下几个文件及文件夹,请先行检查是否存在.

· MDK531.exe

· Keil.STM32F4xx_DFP.2.13.0.pack

· keil.STM32F1xx_DFP.2.2.0.pack

· ARM.CMSIS.5.7.0.pack

· keygen_new2032.exe

· 串口调试助手(文件夹)

· ST-LINK驱动(文件夹)

· CH340驱动(USB串口驱动)_XP_WIN7共用 (文件夹)

如下图所示:

文件夹图片

4. 安装配置文件无病毒如果被安全软件误删,请动动小手关闭安全软件并从安全软件中恢复被“和谐”的文件。

在下图所示位置:选中发现的威胁将被隔离的文件选择"允许在设备上"然后点击"执行操作"即可
2

三、安装步骤

1.鼠标右键点击 "MDK531.exe",并选择以管理员身份启动进行安装

点击Next即可开始安装

安装keil

2.任意位置进行安装

任意位置均可安装,但建议将安装位置选择D盘防止后期C盘爆满(C盘清洁设置具体操作方法可以查看我的这篇Blogs:
Win11减少C盘占用及清爽系统配置教程
)

安装位置

安装过程中会要求填写姓名地址等联系方式,这部分无论填什么都不会影响后续的使用可以随意填写

安装填信息

填写完信息后耐心等待安装完成即可过程中可能会出现CMD窗口,完成安装后点击Finish便完成了软件本体的安装

安装完成

点击Finish后会出现一个Keil的界面,在这个界面里选择左上角Packs,把Check For Updates on launch的勾去掉后 关闭窗口,忽略提示即可。

关闭更新

3.安装芯片驱动包

安装完软件之后我们还需要安装STM32的软件驱动包,我们提供在学习和项目过程常用的F1和F4芯片的驱动包供大家使用,依次点击最开始文件夹中的"Keil.STM32F4xx_DFP.2.13.0.pack"和"keil.STM32F1xx_DFP.2.2.0.pack"安装即可,步骤可参考软件本体的安装步骤。

4.破解方法

安装之后我们还不能正常使用本软件还需对其进行破解,首先在桌面或者在开始菜单中找到安装完成的Keil5软件("keil uVision5"),右键以管理员身份打开,选择左上角"File"下的"License Management"并复制弹出窗口里面的CID.

破解

然后打开文件夹中的破解软件
"keygen_new2032.exe"
(
PS:如果没有在解压之前关闭安全中心,这个破解软件可能会被安全中心查杀
)将刚刚复制的内容粘贴到 CID 框,
Target
选择
ARM
,下面的下拉框选择
Professional
,然后点击Generate后会得到一个软件的激活码

破解软件1

然后将获得的激活码复制填入New License ID Code中,点击Add LIC,中间表格区域出现激活内容即算激活成功

破解2

至此,keil的安装完美结束啦!!!!!!!!!!!!!!!!

STM32CubeMX安装配置教程

一、软件介绍

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者,允许用户使用图形化向导生成C初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。在CubeMX 上,通过傻瓜化的操作便能实现相关配置,从MCU/MPU选型,引脚配置,系统时钟以及外设时钟设置,到外设参数配置,中间件参数配置,它给STM32开发者们提供了一种简单,方便,并且直观的方式来完成这些工作,所有的配置完成后它还可以根据所选的IDE生成对应的工程和初始化C代码。除此以外,STM32CubeMX还提供了功耗计算工具,可作为产品设计中功耗评估的参考。最终能够生成C语言代码,支持多种工具链,比如 MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间,并且随着ST停止了标准库的更新,ST官方大力推荐CubeMX与HAL库的使用,虽然现在还是 标准库的主场,但是CubeMX的使用率在逐年提高,所以学习下CubeMX的基本使用也是我们需要掌握的技能之一。

CubeMX/HAL 库使用学习链接:
http://t.csdnimg.cn/UH7Ah

Java 官网:
https://www.java.com/en/download/manual.jsp

CubeMX安装官网:
https://www.stmcu.com.cn/Designresource/detail/software/711298

二、安装软件

1. 进入上方给出的STM32CubeMX官网后点击下载(
在官网下载需要注册下ST官网账号,目前最新为6.10.0版本,软件本身免费,使用Clion 作为开发工具的不要下载最新版,建议下载6.4.0.
)拿到安装包后右键选择以管理员权限运行本安装包,并选择"Install For All Users"

stm

2. 随后在出现的界面一直点击Next即可


stm2

3. 选择安装路径的界面建议将软件安装至D盘,后期软件包大小有些许大安装在D盘可以防止C盘爆满影响系统运行速度

stm3

4. 之后一直选择Next并选择默认配置即可完成安装

stm4

三、安装芯片驱动包

打开安装好的 STM32CubeMX 软件 点上面的Help->Manageembeddedsoftware packages 会跳出来一个选择型号界面勾选上你要安装的HAL库,点击“InstallNow” 直到安装成功即可。

stm5

s

至此,STM32CubeMX的安装完美结束啦!!!!!!!!!!!!!!!!

OpenOCD安装配置方法

OpenOCD安装地址:
Download OpenOCD for Windows (gnutoolchains.com)

一、工具介绍

OpenOCD(Open On-Chip Debugger)是一款开源的开放式片上调试软件,需要在调 试适配器(如:JTAG、SWD等)的配合下可以对片上系统进行相应调试,以及在嵌入式设备 上测试系统内程序或边界接扫描测试。

二、安装方法

1. 在上述链接里选择下载OpenOCD并解压

ocd

2. 将解压后文件的bin目录添加到环境变量中后即可使用

首先打开系统设置,在搜索框搜索"环境"选择编辑系统环境变量,在弹出的窗口选择"环境变量"一项
ocd2

接着在下方"系统变量"窗格双击"Path"即可进入系统环境变量的编辑窗口

ocd3

最后在弹出窗口点击"浏览"后选择OpenOCD的Bin文件夹点击确认即可

ocd4

至此,OpenOCD的安装完美结束啦!!!!!!!!!!!!!!!!

Clion的安装与嵌入式开发的配置

Clion安装地址:
CLion: A Cross-Platform IDE for C and C++ by JetBrains

一、软件介绍

Clion 是 Jetson 推出的一个C和C++集成开发环境,其可以支持嵌入式开发,虽然这个软件是收费的但如果你是学生或者教育工作者的话均可以申请免费使用但是速度通过速度较慢大致需要1Days的样子,还有一种方式在此不做过多的赘叙(为何你不看看万能的Tao宝呢???)

同时由于Clion自带MinGW,所以其实配置Clion的过程中不需要像其他网上的教程所说重新下载一遍MinGW!!!

二、安装教程

Clion的安装较为简单,在此就不详细展开唯一要注意的便是在安装的界面中记得勾选"添加Bin文件到PATH"免得后期自己添加过于麻烦,只不过安装完成之后需要重启一下更新系统环境变量

clion

三、嵌入式开发配置

安装完Clion、STM32CubeMX以及OpenOCD后便可以开始配置Clion的嵌入式开发环境,由于新版的Clion无法在启动界面打开软件设置(也有可能是我没找到入口?),读者可以先随便新建一个项目并打开,在打开的项目主页面点击"文件"->"构建、执行、部署"->"嵌入式开发",打开之后需要选择读者STM32CubeMX以及OpenOCD对应的bin文件的安装路径,一般来说添加了STM32CubeMX以及OpenOCD的环境变量后Clion会自动更新其路径,但如果没有自动更新出现路径也可以点击后面的三个点来手动选择软件的路径

s

在选择好软件的路径之后可以点击后面的测试按钮来测试STM32CubeMX以及OpenOCD在Clion上面是否成功配置,如果点击了测试后弹出的提示信息是绿色的即代表配置正确

w

至此,Clion的嵌入式配置安装完美结束啦!!!!!!!!!!!!!!!!

Mac配置教程

由于Mac系统的特殊性,Mac暂时还无法安装Keil,于是只能选择优雅的使用CLion+OpenOCD+STM32CubeMX这一套跨平台开源的的开发工具,这套工具以现代化的IDE工具Clion为核心,可以用以多个AI插件来复制开发如Github的Copliot,笔者的前开发工具便为这个,用起来那是朗朗上手!

由于Mac上的Stm32CubeMX以及Clion的配置方法与Win上的配置方法几乎一样,相关内容可以参考Windows的安装流程,本节仅介绍Mac上HomeBrew及OpenOCD的安装方法.

这里给出Mac上相关软件和工具的下载路径:

Clion:
https://www.jetbrains.com/clion/

STM32CubeMX:
https://www.st.com/en/development-tools/stm32cubemx.html#get-software

HomeBrew安装

一、工具介绍

Homebrew 是一个流行的包管理器,专为 MacOS(以及 Linux)操作系统设计。它允许用户通过命令行界面轻松安装、更新和管理软件包。Homebrew 的主要优势在于其易用性、灵活性和社区支持。用户可以通过简单的命令来安装所需的软件,而无需复杂的配置过程。 Homebrew 的工作原理是通过一个中央仓库,即 Homebrew Formulae,来管理软件包的配方(Formulae)。每个配方都是一个 Ruby 脚本,定义了如何下载、配置、编译和安装软件。Homebrew 社区不断更新这些配方,以确保软件包的最新性和兼容性。

home

二、安装方法

打开Mac的终端命令行

1. 检查系统中是否有HomeBrew

brew -v  #有输出的话便代表电脑中存在HomeBrew

2. 如果有HomeBrew,先进行卸载

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

类似于ROS,HomeBrew也有大神做了一个一键自动化安装脚本(但可能需要挂代理进行ke xue shang wang)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" #根据提示一步步安装即可

出现一下图片中的内容即代表HomeBrew安装成功

ho

至此,Mac上的HomeBrew安装完美结束啦!!!!!!!!!!!!!!!!

OpenOCD安装

Mac由于是Unix的内核,因此在HomeBrew这种包管理工具的加持之下,Mac配置环境下载工具比Win会轻松很多,就如OpenOCD来说Mac上只需一行代码便可以安装配置完成

	brew install open-ocd  #下载OpenOCD

ARM toolchain安装

由于Mac是Arm系统于是需要安装Arm的开发工具链(类似与Win中的MinGW),同样也是两行命令就能很快解决进行下载

brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

为了测试是否安装成功,可以在终端中输入一下命令进行检查,有输出便代表安装成功

arm-none-eabi-gcc -v 

接下来就只剩修改Clion中的STM32CubeMX以及OpenOCD路径了,配置方式和Win一样便不在赘叙

安装过程中的问题解决方法:

在安装过程中遇到的任何问题及解决办法或者文档中出现的错误欢迎大家联系我进行添加和删改!

先看一下效果吧:

如果不会写动画或者懒得写动画,就直接交给Blend来做吧;

其实Blend操作起来很简单,有点类似于在操作PS,我们只需要设置关键帧,鼠标点来点去就可以了,Blend会自动帮我们生成我们想要的动画效果.

第一步:要创建一个空的WPF项目

第二步:右键我们的项目,在最下方有一个,
在Blend中设计

如果没有这个,应该是你在安装vs的时候把它勾掉了,默认是勾选的,没有的话也可以重新安装回来

点一下上方导航条的
工具栏

安装一下就可以了

第三步:打开的Blend项目操作页面和WPF的页面几乎是一模一样的

我们在里面添加一个button按钮,设置长100,高30

然后在设计器中右键我们的Button,找到编辑模板,编辑副本, 点击确定, 然后vs会给我们生成一大段代码

他的ControlTemplate里面的代码是这样的

<Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
     <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>

我们改成下面这样一段代码

<Grid>
     <Border x:Name="border" Background="{TemplateBinding Background}" BorderBrush="#FFDACFCF" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true" CornerRadius="10"/>
<Border x:Name="border1" Background="#7FFFFFFF" CornerRadius="10">
<Border.Clip>
<RectangleGeometry>
<RectangleGeometry.Rect>
<Rect Width="0" Height="30" X="50" Y="0"/>
</RectangleGeometry.Rect>
</RectangleGeometry>
</Border.Clip>
</Border>
<ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> </Grid>

我们把原本的ContentPresenter从Border内部拿出来,然后在他们中间夹一层Border,再设置一下这个Border的背景色为White,接着在属性面板里面把他的透明度调整成百分之50

(也可以自己根据喜好调整颜色和透明度,只要能看到Button的文本就行了)

再给这个border添加一个Clip(Clip是什么可以把鼠标放在Clip上,按F1,查看文档说明)

设置里面的Rect的坐标和宽高(坐标点是基于空间的左上角,左上角就是(0,0),右下角就是(宽,高))

因为我们设置的从中间像两边扩散的效果,所以我们把这个矩形放到中间位置,也就是(50,0)的位置

第四步:现在来利用Blend来写一段动画

Blend得左边有一个
文档大纲

打开它就能看见
对象和时间轴

点一下那个绿色得
+
号,Blend会创建一个空得动画

接着整个界面就会被红色的线圈住

这个时候我们就可以添加动画了

我们在0秒和1秒的位置,分别点一下那个记录关键帧的按钮

然后我们再点一下1秒关键帧的位置

最后在代码里面选中我们的Border的Rect

修改这里的值,就表示,在1秒以后,这个border的clip会变成什么值

初始值是50,0,0,30

我们改成0,0,100,30,按回车,Blend就自动把动画给生成了

第五步:把这个动画运用到Button的Triggers下面的IsMouseOver为true的下面

<Trigger Property="IsMouseOver" Value="true">
    <Trigger.EnterActions>
        <BeginStoryboard x:Name="bs1" Storyboard="{StaticResource Storyboard1}"/>
    </Trigger.EnterActions>
    <Trigger.ExitActions>
         <StopStoryboard BeginStoryboardName="bs1"/>
    </Trigger.ExitActions>
</Trigger>

这样在IsMouseOver这个属性变成True的时候,就会执行这个动画了;

或者我们也可以用EventTrigger来实现这个效果

<EventTrigger RoutedEvent="{x:Static UIElement.MouseEnterEvent}">
     <BeginStoryboard Storyboard="{StaticResource Storyboard1}" x:Name="bs1"/>
</EventTrigger>
<EventTrigger RoutedEvent="{x:Static UIElement.MouseLeaveEvent}">
     <StopStoryboard BeginStoryboardName="bs1"/>
</EventTrigger>

区别就在于一个是在属性变更的时候触发动画,一个是在路由事件中执行动画,二者任选其一即可

项目github地址:
bearhanQ/WPFFramework: Share some experience (github.com)

QQ技术交流群:332035933;