prism

ARM启动流程及启动代码分析

て烟熏妆下的殇ゞ 提交于 2020-04-09 04:04:19
一、ARM的启动流程 基于ARM的芯片多数为复杂的片上系统。这种复杂系统里的多数硬件模块都是可配置的。需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需要由专门的一段代码来完成对系统的初始化。由于这类代码直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。一般通用的内容包括: 中断向量表 初始化存储器系统 初始化堆栈 初始化有特殊要求的端口,设备 初始化用户程序执行环境 改变处理器模式 呼叫主应用程序 二、ARM的启动文件 以stm32的启动文件为例,stm32的启动文件一般都是包含在具体单片机型号的汇编文件中(.s文件),下图为启动文件的简述(description) 和我们预想的差不多,该启动文件主要包含了初始化堆栈、初始化程序指针(PC)、初始化中断向量表、配置系统时钟和外部Sram(可选)、跳转到main函数 三、启动文件代码具体分析 第一部分配置堆和栈的大小(Stack_size Heap_size) 如上图 AREA STACK, NOINIT, READWRITE, ALIGN=3 ;定义栈,可初始为0,8字节对齐 (堆代码类似相同功能) Stack_Mem SPACE Stack_Size ;分配0x400个连续字节,并初始化为0 (堆代码类似相同功能) __initial_sp ;汇编代码地址标号 (堆代码类似相同功能) PRESERVE8

.NET Core 3 WPF MVVM框架 Prism系列之数据绑定

纵饮孤独 提交于 2020-04-09 04:03:27
原文: .NET Core 3 WPF MVVM框架 Prism系列之数据绑定 一.安装Prism 1.使用程序包管理控制台 # Install-Package Prism.Unity -Version 7.2 . 0.1367 也可以去掉‘-Version 7.2.0.1367’获取最新的版本 2.使用管理解决方案的Nuget包 # 在上面或许我们有个疑问?为啥安装prism会跟Prism.Unity有关系,我们知道Unity是个IOC容器,而Prism本身就支持IOC,且目前官方支持几种IOC容器: 1.且unity由于是微软官方的,且支持prism的组件化,由此我推荐使用prism.unity,在官方文档中prism7不支持prism.Mef,Prism 7.1将不支持prism.Autofac 2.安装完prism.unity就已经包含着所有prism的核心库了,架构如下: 二.实现数据绑定 我们先创建Views文件夹和ViewModels文件夹,将MainWindow放在Views文件夹下,再在ViewModels文件夹下面创建MainWindowViewModel类,如下: xmal代码如下: <Window x:Class= " PrismSample.Views.MainWindow " xmlns = " http://schemas.microsoft.com

numpy笔记

孤街醉人 提交于 2020-04-09 00:51:17
ndarray创建方式 # 1.从列表、元组等类型创建ndarray x1 = np . array ( [ 1 , 2 , 3 , 4 ] ) [ 1 2 3 4 ] x2 = np . array ( ( 5 , 6 , 7 , 8 ) ) [ 5 6 7 8 ] x3 = np . array ( [ [ 1 , 2 ] , [ 3 , 4 ] , ( 0.2 , 0.5 ) ] ) [ [ 1 . 2 . ] [ 3 . 4 . ] [ 0.2 0.5 ] ] 2.arange ones zeros等函数 y1 = np . arange ( 10 ) [ 0 1 2 3 4 5 6 7 8 9 ] ##ones zeros eye默认为浮点数类型,除非指定 y2 = np . ones ( ( 2 , 3 , 6 ) ) [ [ [ 1 . 1 . 1 . 1 . 1 . 1 . ] [ 1 . 1 . 1 . 1 . 1 . 1 . ] [ 1 . 1 . 1 . 1 . 1 . 1 . ] ] [ [ 1 . 1 . 1 . 1 . 1 . 1 . ] [ 1 . 1 . 1 . 1 . 1 . 1 . ] [ 1 . 1 . 1 . 1 . 1 . 1 . ] ] ] y3 = np . zeros ( ( 3 , 6 ) , dtype = np . int32

常用51单片机实现DHT11和ESP8266实现温湿度数据无线传输

心已入冬 提交于 2020-04-08 21:18:41
常用51单片机实现DHT11和ESP8266实现温湿度数据无线传输 第一篇文章 这个是我在CSDN尝试写的第一篇文章,这个项目来源是大学的大创项目,在制作的过程中,因为自己也是受到了很多来自CSDN平台的大神的支持,同时也总结了类似文章中没有提到的问题,写的有不好的和不专业的地方还希望大家多多指正,废话不多说开始吧。 DHT11模块 这个模块基本就是买上手就能知道怎么接线(就直接把三个端口对应接在单片机开发板上即可,后面需要扩展多个时候只需要重新定义数据口,要是电源线不够可以使用面包板, 定义时注意别用单片机上的有特定功能的端口 )。 DHT11程序部分 这个传感器的程序是我在制作整个阶段耗费时间最长的部分,因为刚接触这个东西的时候很多东西没有学,代码写的也很少,完全掌握这个模块的代码还是在完成了单片机与微机两门课后。实际上现在看起来这是这个系统最简单的一份代码了。 DHT11采集数据 先要看懂时序图,关于这个时序图网上包括说明书上都有介绍这里就不啰嗦了,掌握数电和单片机之后,完全有能力掌握。 这个是开始信号,和大部分的DHT11的代码是一样的,主要还是delay-1ms要写好后面的4个1us延时可用可不用。 void start ( ) //开始信号 { i0 = 1 ; delay_1us ( ) ; i0 = 0 ; delay_1ms ( 20 ) ; //拉低至少

如何保证网络传输的可靠性?头条面试官这样问我

拥有回忆 提交于 2020-04-08 21:01:11
多点头发,少点代码 本文已经收录至我的GitHub,欢迎大家踊跃star 和 issues。 https://github.com/midou-tech/articles 唠叨几句 前几天在群里问了下大家最近春招的状态。 如果你还在参加春招,不管是社招还是校招。龙叔都想唠叨几句,今年整体经济形势很差,可能有些人还没意识到有多差,但我相信很多人都能感受到。很多公司入不敷出,基本都在裁员和压缩成本,很多公司把原来的扩张计划改成了 活下去 。 正在找工作的各位,不可对市场预期太高,不要感觉我专业的学长学姐都是非bat不进的,现在市场供求关系变了,需求变得越来越少了,供给却一直在增加,找工作的你也应该调整自己的预期。当然好能力的人还是会非bat不去的,但很重要的点是 好能力 ,但不可能人人都是好能力的,所以你要有正确的心里预期和不断的打磨自己的能力。 准备跳槽的你也一定要思考清楚在跳,以前每年都是金三银四跳槽季。今年,听到几个准备跳槽的学长说,好多公司都是象征性的面面,根本不发offer。 顺便说一下什么叫象征性的面面,公司是对外的,公司不管在什么时候都会招人的,如果你看到一个公司的对外网站不招人了,基本说明该公司凉了。除非真的倒闭,一般情况下公司都会在官网放出招聘信息,但是真的在招人么? 所以就有了面了好多就是不过,面的也非常好,就是不发offer。如果是这样,不是你不行,是市场不行

(Attention) This summarize is all you need for Attention

*爱你&永不变心* 提交于 2020-04-08 20:55:59
之前已经写过一篇Attention专门的总结, 可查阅 1 , 但是在那篇文章中的下笔和涵盖范围还是不够令我满意, 所以此处新开一文, 争取做到涵盖更广, 排版更系统的文章. Ref What is Attention [blog] ↩︎ 点赞 收藏 分享 文章举报 bryce1010 发布了759 篇原创文章 · 获赞 200 · 访问量 33万+ 他的留言板 关注 来源: oschina 链接: https://my.oschina.net/u/4361024/blog/3225131

AAPT: error: resource attr/** (aka com.**.app:attr/**) not found.

Deadly 提交于 2020-04-08 17:32:46
问题记录 记录项目中的一个问题,不知什么时候,运行项目会出现这个错误: 解决方法 buildscript { repositories { google ( ) jcenter ( ) } dependencies { //之前使用的是3.5.2版本,升级成3.6.2后就出现了上面的错误, //还原成原来版本问题消失。 //猜测是gradle3.6.2版本存在问题。 classpath 'com.android.tools.build:gradle:3.6.2' } } 反思 项目出现问题时,需要考虑出现问题之前——>出现问题之后,改动过哪些代码,很有可能是这些修改引起了错误。 尝试将修改分别还原,看错误是否能消失,逐一排查。 来源: oschina 链接: https://my.oschina.net/u/4264465/blog/3224793

静态注册与动态注册

*爱你&永不变心* 提交于 2020-04-08 17:32:10
一.静态注册的广播接收者居然不能接收广播 这是我们上课的时候,出现的一个问题,用静态注册,在清单文件中注册的广播接收者不能接收广播。 先上代码: 我们首先在清单文件中静态注册广播接收者,并且为其添加意图过滤器 < receiver android : name = ".MyBroadcastReceiver" android : enabled = "true" android : exported = "true" > < intent - filter > < action android : name = "jiuzhe_Zuishuai" > < / action > < / intent - filter > < / receiver > 然后在布局文件中设置了一个发送广播按钮的点击事件 android : onClick = "send" public void send ( View view ) { Log . v ( "jiuzhe" , "send" ) ; Intent intent = new Intent ( ) ; intent . setAction ( "jiuzhe_Zuishuai" ) ; sendBroadcast ( intent ) ; 然后我们还需要编写一个自定义广播接收者的类 public class

javaScript——函数防抖

烂漫一生 提交于 2020-04-08 17:17:26
函数防抖 什么是函数防抖 函数防抖代码 什么是函数防抖 函数防抖代码 //普通写法 var timer = null ; var timerFunc = ( ) => { console . log ( "移动时间:" + new Date ( ) . getTime ( ) ) ; } function moveFunc ( ) { if ( null != timer ) { clearTimeout ( timer ) ; } timer = setTimeout ( timerFunc , 1000 ) ; } window . addEventListener ( "mousemove" , moveFunc ) ; //闭包创建私有变量 function timerFunc ( ) { console . log ( "移动时间:" + new Date ( ) . getTime ( ) ) ; } function moveFunc ( func , delay ) { var timer = null ; return ( ) => { if ( null != timer ) { clearTimeout ( timer ) ; } timer = setTimeout ( ( ) => { func . apply ( this , arguments ) }

javaScript——函数防抖

两盒软妹~` 提交于 2020-04-08 17:07:07
函数防抖 什么是函数防抖 函数防抖代码 什么是函数防抖 函数防抖代码 //普通写法 var timer = null ; var timerFunc = ( ) => { console . log ( "移动时间:" + new Date ( ) . getTime ( ) ) ; } function moveFunc ( ) { if ( null != timer ) { clearTimeout ( timer ) ; } timer = setTimeout ( timerFunc , 1000 ) ; } window . addEventListener ( "mousemove" , moveFunc ) ; //闭包创建私有变量 function timerFunc ( ) { console . log ( "移动时间:" + new Date ( ) . getTime ( ) ) ; } function moveFunc ( func , delay ) { var timer = null ; return ( ) => { if ( null != timer ) { clearTimeout ( timer ) ; } timer = setTimeout ( ( ) => { func . apply ( this , arguments ) }