代码如下:代码思想:(ab)->(ba); 海报分享 扫一扫,分享海报
代码如下:代码思想:(ab)->(ba); 海报分享 扫一扫,分享海报
强化学习在游戏有广泛应用,下面提供一个游戏链接的实例:
https://www.bilibili.com/video/BV1nE411H7qJ/?spm_id_from=333.788.videocard.1
其实第一次看这个视屏我陷入了哲学哈哈,万一他学习到最后学习到他们只是在游戏中开始消极对待怎么办,或者再后来,一开始消极对待,然后他意识到你说的这一点又开始假装积极对待。
这是强化学习的一个实例,掉到坑里是负反馈,到达目的地给正反馈。(当时第一感觉是有点像DFS和BFS哎)
这是强化学习和监督学习的区别示例图,一般做预测的时候监督学习(比如深度学习的图像分类,前段时间刚入门)就会预测出图片中的物种是啥,但是强化学习则会告诉你决策,熊大熊二不是好惹的,赶紧撞死骗过去。
Vue安装:下载:vue.jsCDN:npm安装:通过命令行窗口进行全局安装:Vue实例配置: el: 挂载的虚拟节点(基本结构);如果没有el指定节点,需要使用vm.$mount()主动挂载
一、目录操作:
1、结构:/ 系统根目录、~当前用户家目录、其他普通目录
2、切换目录:
cd 目录– 绝对路径、相对路径
作者 | 李秋键 责编 | Carol 头图 | CSDN 付费下载自视觉中国 人工智能作为当前热门在我们生活中得到了广泛应用,尤其是在智能游戏方面,有的已经达到了可以和职业选手匹敌的效果。而DQN算法作为智能游戏的经典选择算法,其主要是通过奖励惩罚机制来迭代模型,来达到更接近于人类学习的效果。
不久前,在论坛中笔者看到有位女程序员吐槽道:她现在已经北漂6年了,之前也有过几次失业的经历,因为她觉得在互联网公司写代码已经有些厌烦,毕竟已经工作这么长时间,而且在一些创业公司,甚至要工作加班到晚上12点以后才能够回家休息,所以现在这位女程序员就觉得自己变得越来越抑郁,年薪虽然能够达到近25万,可是她却觉得自己在这个行业中并不想继续坚持下去了,不过在和家人商量这件事情以后,家人并不同意她的想法,考虑再三只能继续坚持下去,很多同样在互联网行业工作的年轻人也是感慨道:其实大部分年轻人在进入这个行业以后就已经没有退路了,大家只能继续选择坚持下去。
很多年前的一个夏日炎热的夜晚,我在一家银行16摄氏度的机房蹲了2小时编写一个功能:
也许 js 算不上一个顶尖的“优秀设计”的编程语言。
但是 js 有一个其他语言目前无法比肩的优势:浏览器支持。
这导致,网站开发者,几乎必须学习 js。
总结本应该在功成名就以后才来书写,但是我相信我的未来不是梦,我相信未来一定有一片属于我的天空。(纯属记录一下学生时代的经历,多年后在回顾,会不会感谢这7年的自己呢?值得期待)
写在开头,为了能够有更好的写代码体验于是安装了YouCompleteMe这个插件,安装成功效果图
1.使用<br />来实现label换行2.xml中<br />转义 由于项目需要使用xml的语言包,xml不能直接使用<br />,所以需要使用<br />的转义。
在我们的生活中,每个人都有不同的乐趣。有的人把钓鱼当做乐趣,有的人把看书当做一种乐趣,也有人把运动当作乐趣。而我最大的乐趣就是集邮。
作者 | 李秋键 责编 | Carol 头图 | CSDN 付费下载自视觉中国 人工智能作为当前热门在我们生活中得到了广泛应用,尤其是在智能游戏方面,有的已经达到了可以和职业选手匹敌的效果。而DQN算法作为智能游戏的经典选择算法,其主要是通过奖励惩罚机制来迭代模型,来达到更接近于人类学习的效果。
思路:1.判断文字的长度和容器的长度,如果文字长度大于容器长度,则开始滚动,否则不滚动。
记录一下,方便以后翻阅~
主要内容:
1) CAN通信基础知识;
2) STM32 CAN控制器简介;
3) 相关实验代码解读。
参考资料:《STM32中文参考手册_V10》第22章——控制器局域网(bxCAN)
实验功能:CAN实验需要两个开发板,系统启动后,主开发板可以让STM32F1的CAN工作在环回模式/普通模式下,通过KEY_UP按键切换模式。默认是环回模式,在环回模式下,按下KEY0,则可以在串口调试助手上面看到自发自收的消息。如果是普通模式,按下次开发板的SW4,可以在主开发板对应的串口调试助手上看到收到的信息。
硬件连接:
实验需要两个开发版,将它们的CAN_H相连,CAN_L相连。具体的,主开发板选择PA11和PA12作为CAN_RX和CAN_TX,次开发板选择PB8和PB9作为CAN_RX和CAN_TX。
1. CAN基础知识
1.1 什么是CAN(Controller Area Network)
CAN是ISO国际标准化的串行通信协议。由德国电气商博世公司在1986 年率先提出。此后,CAN 通过ISO11898 及ISO11519 进行了标准化。现在在欧洲已是汽车网络的标准协议。
CAN协议经过ISO标准化后有两个标准:ISO11898标准和ISO11519-2标准。其中ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准,而ISO11519-2是针对通信速率为125Kbps以下的低速通信标准。
CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
1.2 CAN的特点
1) 多主控制。总线空闲时,所有单元都可发送消息,而两个以上的单元同时开始发送消息时,根据标识符(ID,非目的地址)决定优先级。两个以上的单元同时开始发送消息时,对各消息ID 的每个位进行逐个仲裁比较。仲裁获胜(优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作;
2) 系统柔软性。连接总线的单元,没有类似“地址”的信息,因此,在总线上添加单元时,已连接的其他单元的软硬件和应用层都不需要做改变;
3) 速度快,距离远。最高1Mbps(距离<40M),最远可达10KM(速率<5Kbps);
4) 具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能);
5) 故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去;
6) 连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
正是因为CAN协议的这些特点,使得CAN特别适合工业过程监控设备的互连,因此,越来越受到工业界的重视,并已公认为最有前途的现场总线之一。
1.3 ISO11898标准物理层特征
物理层特征如图所示:
上图中,CAN 控制器根据CAN_L和CAN_H上的电位差来判断总线电平。总线电平分为显性电平(CAN_H约3.5V,CAN_L约1.5V)和隐性电平(CAN_H和CAN_L都为2.5V时)。发送方通过使总线电平发生变化,将消息发送给接收方:
1) 显性电平对应逻辑:0,CAN_H和CAN_L之差为2V左右;
2) 隐性电平对应逻辑:1,CAN_H和CAN_L之差为0V。
逻辑电平值0和1对应STM32芯片上的I/O口的电平值。
逻辑电平值对应CAN_H和CAN_L,中间会经过CAN收发芯片TJA1050,连接如下图所示:
显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。
1.4 帧种类型
1.4.1 5种类型
1) 数据帧(最重要):用于发送单元向接收单元传输数据的帧;
2) 遥控帧:用于接收单元向具有相同ID的发送单元请求数据的帧;
3) 错误帧:用于当检测出错误时向其他单元通知错误的帧;
4) 过载帧:用于接收单元通知其尚未做好接收准备的帧;
5) 间隔帧:用于将数据帧及遥控帧与前面的帧分离开来的帧。
其中,数据帧和遥控帧有标准格式和扩展格式两种格式:
标准格式有11个位的标识符(ID),扩展格式有29 个位的ID 。
1.4.2 数据帧介绍
1.4.2.1 数据帧由7段组成:
1) 帧起始(SOF):表示数据帧开始的段;
2) 仲裁段:表示该帧优先级的段;
3) 控制段:表示数据的字节数及保留位的段;
4) 数据段:数据的内容,一帧可发送0~8个字节的数据;
5) CRC段:检查帧的传输错误的段;
6) ACK段:表示确认正常接收的段;
7) 帧结束(EOF):表示数据帧结束的段。
1.4.4.2 数据帧的构成:
上图中,D表示显性电平,R表示隐形电平(下同)。
1.4.2.3 数据帧解析
1) 帧起始:标准帧和扩展帧都是由1个位的显性电平,值为0表示帧起始;
2) 仲裁段:表示数据优先级的段,标准帧和扩展帧格式在本段有所区别,如图所示:
ID:高位在前,低位在后。基本ID,禁止高7位都为隐性,即不能:ID=1111111XXXX;
RTR:远程请求位。0,数据帧;1, 远程帧;
SRR:替代远程请求位(RTR)。设置为1(隐性电平);
IDE:标识符选择位。0,标准标识符;1,扩展标识符。
标准格式里也有IDE,只是放在了控制段里。
3) 控制段:由6个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同,如图所示:
r0,r1:保留位,必须以显现电平发送,但是接收可以是隐性电平;
DLC:数据长度码,0~8,表示发送/接收的数据长度(字节);
IDE:标识符选择位。0,标准标识符;1,扩展标识符。
4) 数据段:该段可包含0~8个字节的数据,从最高位(MSB)开始输出。标准帧和扩展帧在这个段的格式完全一样:
5) CRC段:该段用于检查帧传输错误。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的:
CRC的值计算范围包括:帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
6) ACK段:此段用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位组成。标准帧和扩展帧在这个段的格式也是相同的:
发送单元ACK段:发送2个隐性位。
接收单元ACK段:接收到正确消息的单元,在ACK槽发送显性位,通知发送单元,正常接收结束。称之为发送ACK/返回ACK。
注意:发送 ACK 的是既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送ACK)。
正常消息是指:不含填充错误、格式错误、CRC 错误的消息。
7)帧结束:由7个位的隐性位组成(即7个1)。标准帧和扩展帧在这个段格式完全一样。
1.5 总线仲裁
同时多个单元发送数据时,总线仲裁过程:
规律:1,总线空闲时,最先发送的单元获得发送优先权,一但发送,其他单元无法抢占。2,如果有多个单元同时发送,则连续输出显性电平多的单元,具有较高优先级。
从ID开始比较,如果ID相同,还可能会比较RTR和SRR等位。
1.6 位时序
1.6.1 位速率:由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位一般可以分为如下四段:
1) 同步段(SS);
2) 传播时间段(PTS);
3) 相位缓冲段1(PBS1);
4) 相位缓冲段2(PBS2)。
这些段又由可称为 Time Quantum(以下称为Tq)的最小时间单位构成。1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序。
位时间=1/波特率,因此,知道位时间,我们就可以知道波特率。
1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
1.6.2 位时序各段的作用和 Tq 数如下表:
备注:在STM32上,传播时间段和相位缓冲段的值是加在一起的,则对应Tq数为2~16。
1.6.2 一个位的构成:
图中采样时间加大或减少量的最大值就是SJW。
举例:假设设置1M的波特率,则Tq设为0.1μs。
2. STM32 CAN控制器简介
2.1 STM32自带了基本扩展CAN外设,又称bxCAN。bxCAN的特点如下:
2.1.1 支持CAN协议2.0A和2.0B主动模式;
2.1.2 波特率最高达1Mbps;
2.1.3 支持时间触发通信;
2.1.4 具有3个发送邮箱
2.1.5 具有3级深度的2个接收FIFO
2.1.6 可变的筛选器组(也称过滤器组,普通的F1有14个,F1互联型和F4有28个)。
2.2 模式
2.2.1 工作模式(通过CAN_MCR寄存器控制INRQ和SLEEP)
2.2.1.1 初始化模式(INRQ=1,SLEEP=0);
2.2.1.2 正常模式(INRQ=0,SLEEP=0);
2.2.1.3 睡眠模式(SLEEP=1)。
2.2.2 测试模式(通过CAN_BTR寄存器控制LBKM和SILM)
2.2.2.1 静默模式( LBKM=0,SILM=1 ):
接收总线上CANRX的数据,不发送数据至CANTX上(一直发1,即隐形电平);
2.2.2.2 环回模式( LBKM=1,SILM=0 ):
发送数据到总线的CANTX上,且通过环路传至接收端,但不接受CANRX的数据;
2.2.2.3 环回静默模式(LBKM=1,SILM=1):自己给自己发数据,测试用。
2.2.3 调试模式
2.3 bxCAN框图
2.3.1 普通F1系列只有1个主CAN,互联型F1和F4还有一个从CAN,即两个CAN;
2.3.2 两个CAN分别拥有自己的发送邮箱和接收FIFO,但是他们共用28个筛选器。
2.4 标识符删选器
2.4.1 CAN的标识符不表示目的地址而是表示发送优先级。接收节点根据标识符的值,来决定是否接收对应消息;
2.4.2 STM32 CAN控制器,提供了28个可配置的筛选器组(F1仅互联型才有28个,其他的只有14个),可降低CPU处理CAN通信的开销;
2.4.3 STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供:
1个32位筛选器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位;
或者2个16位筛选器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位。
2.4.4 筛选器可配置为:屏蔽位模式和标识符列表模式。在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”或“不用关心”处理。而在标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用2个标识符寄存器。接收报文标识符的每一位都必须跟筛选器标识符相同。
通过CAN_FM1R和CAN_FS1R寄存器可配置筛选器的位宽和模式:
筛选器的用途:
1) 为了过滤出一组标识符,应该设置筛选器组工作在屏蔽位模式(标识符掩码);
2) 为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式;
3) 应用程序不用的筛选器组,应该保持在禁用状态(通过CAN_FA1R设置);
4) 筛选器组中的每个筛选器,都被编号为(即:筛选器编号)从0开始,到某个最大数值-取决于筛选器组的模式和位宽的设置;
5) 通过CAN_FFA1R寄存器的设置,可以将筛选器组关联到FIFO0/FIFO1。
举例:
设置筛选器组0工作在:1个32位筛选器-标识符屏蔽模式,然后设置CAN_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00。
则CAN_F0R1的值是期望收到的ID,即(STID+EXTID+IDE+RTR)最好是:0XFFFF0000;
而CAN_F0R2=0XFF00FF00是我们需要关心的ID,表示收到的映像,其位[31:24]和位[15:8]这16个位的必须和CAN_F0R1中对应的位一模一样,而另外的16个位则不关心,即收到的映像必须是0XFFxx00xx,才算是正确的(x表示不关心)。
2.5 STM32 CAN的发送流程
CAN的发送流程为:
程序选择1个空置的邮箱(TME=1)->设置标识符(ID),数据长度和发送数据à设置CAN_TIxR的TXRQ位为1,请求发送->邮箱挂号(等待成为最高优先级)->预定发送(等待总线空闲)->发送->邮箱空置。
APRQ=1意思是强制退出;若设置NART重复发送状态,则发送失败会回到预定状态,尝试再次发送,待达到所设的最大次数仍为成功,则也会发送失败。
2.6 接收流程
CAN接收流程为:
FIFO空->收到有效报文->挂号_1(存入FIFO的一个邮箱,这个由硬件控制,我们不需要理会)->收到有效报文->挂号_2->收到有效报文->挂号_3->收到有效报文->溢出。
CAN收到的有效报文,存储在3级邮箱深度的FIFO中。FIFO接收到的报文数,我们可以通过查询CAN_RFxR的FMP寄存器来得到,只要FMP不为0,我们就可以从FIFO读出收到的报文。
报文FIFO具有锁定功能(由CAN_MCR,RFLM位控制),锁定后,新数据将丢弃,不锁定则新数据将替代老数据。
2.7 位时序
STM32的CAN位时序,如下图所示:
提示:STM32的CAN将传播时间段(PTS)和相位缓冲时间段1(PBS1)合并成时间段1(BS1);
STM32F103,设TS1=8、TS2=7、BRP=3,波特率=36000/[(9+8+1)*4]=500Kbps;
STM32F407,设TS1=6、TS2=5、BRP=5,波特率=42000/[(7+6+1)*6]=500Kbps。
2.8 寄存器简介
2.8.1 CAN主控制寄存器(CAN_MCR)
INRQ位用来控制初始化请求:
设置INRQ=0,可使CAN从初始化模式进入正常工作模式;
设置INRQ=1,可使CAN从正常工作模式进入初始化模式 。
CAN初始化时,先设置INRQ=1,进入初始化模式,进行初始化(尤其是CAN_BTR的设置,该寄存器,必须在CAN正常工作之前设置),之后再设置INRQ=0,进入正常工作模式。
2.8.2 CAN位时序寄存器(CAN_BTR)
备注:tCAN就是tq。
2.8.3 CAN接收FIFO寄存器(CAN_RF0R/CAN_RF1R)
CAN_RF0R用于FIFO0控制(寄存器描述如上图);
CAN_RF1R用于FIFO1控制。
2.8.4 CAN发送邮箱标识符寄存器(CAN_TIxR)(x=0~2)
你是否了解,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑。
OCR(Optical Character Recognition):光学字符识别,是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后由Google进行改进、修改bug、优化,重新发布。
**实例: 利用html表单和js的数学对象及函数做一个有验证码的简单登录表单实操:利用日期对象和方法以及其他相关知识实现简单的钟表功能
毛亚东,男,大专学历,1997年1月4日出生,河南人,毕业于辽宁省国家开放大学,JAVA开发工程师。
最近想要系统地学习下linux 驱动程序的设备树的知识。韦东山老师提到驱动有如下三种写法: