源码

从0开始的FreeRTOS(2)

混江龙づ霸主 提交于 2020-01-24 11:47:40
“从0开始的FreeRTOS”系列教程第二讲 作者:satori 这一期教程中,我们将介绍FreeRTOS源码的内容,如何使用cubemx快速生成一个包含freertos的工程,以及包含freertos的工程的结构。 https://sourceforge.net/projects/freertos/files/FreeRTOS/ 在上面的网址中下载FreeRTOS源码之后我们得到一个压缩包 解压之后我们看到如下的文件,其中FreeRTOS文件夹中包含了源码和一些平台上的实例demo,FreeRTOS-Plus下是一些拓展功能的源码和demo,剩下的网页主要是一些介绍性的内容。 这里我们主要关注FreeRTOS文件夹下的内容 Demo下包含了大量已经移植好FreeRTOS的示例工程,包含了不同的硬件平台和开发环境。 Source文件夹下是FreeRTOS的源码,在我们使用FreeRTOS进行工程开发时我们需要将源码移植进工程中,只不过如果借助CubeMX生成工程,我们可以免去手动移植的麻烦 源码搭建的方式我们不加以介绍,可以参见这篇教程 http://www.cnblogs.com/yangguang-it/p/6891427.html 下面我们演示如何使用cubemx生成一个包含FreeRTOS的stm32工程,并控制板子上的两盏流水灯以不同的频率闪烁 cubemx中的配置如下:

OkHttp3源码详解(二) 整体流程

六眼飞鱼酱① 提交于 2020-01-24 06:09:44
1.简单使用 同步: 1 @Override public Response execute() throws IOException { 2 synchronized (this) { 3 if (executed) throw new IllegalStateException("Already Executed"); 4 executed = true; 5 } 6 try { 7 client.dispatcher().executed(this); 8 Response result = getResponseWithInterceptorChain(false); 9 if (result == null) throw new IOException("Canceled"); 10 return result; 11 } finally { 12 client.dispatcher().finished(this); 13 } 14 } 首先加锁置标志位,接着使用分配器的executed方法将call加入到同步队列中,然后调用getResponseWithInterceptorChain方法(稍后分析)执行http请求,最后调用finishied方法将call从同步队列中删除 异步: 1 void enqueue(Callback responseCallback,

ArrayList源码分析(Java8)

做~自己de王妃 提交于 2020-01-24 02:52:03
ArrayList集合 1、特点: - 底层是Object[] 的数组 - 在内存中是连续的内存空间、并且按照顺序进行存储的 - 允许有空值存在 - 初始化大小为10 *注意: 1、因为是连续的存储空间,所以在查找某个位置数据是很快的,往中间插入数据是很慢的。 2、只有同一种数据类型的数据才可以放在同一个数组当中。 3、在往集合添加数据的时候需要检查集合是否需要扩容,扩容操作对于性能而言消耗是很大的,如果已知数据量多大的情况下,最好指定集合的大小。* 2、构造方法: (1)无参构造方法: public ArrayList() { this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; } (2)指定初始化大小的构造方法: public ArrayList(int initialCapacity) { if (initialCapacity > 0) { // 当初始化大小大于0时: this.elementData = new Object[initialCapacity]; } else if (initialCapacity == 0) {//当初始化大小等于0时: this.elementData = EMPTY_ELEMENTDATA; } else { //否则参数错误 throw new

程序员修炼之道读后感(二)

时间秒杀一切 提交于 2020-01-24 02:51:14
俗话说,工欲善其事,必先利其器。作为软件工程师掌握好几门工具是取得成功的根本。花时间去学习这些工具,你会有意想不到的收获。用纯文本来保存知识,但其也有一些缺点如所占空间较大,但其优点也很明显如永不过时,杠杆作用,易于调试。 学会使用shell,使你的生产力提高。至少用好一种编辑器,彻底了解他,掌握它,因为它是可扩展,可配置,可编程。 使用源码控制系统来追踪你在源码和文档中所做的每一项变动,将自己日常工作保存在仓库中。不要恐慌,当调试时产生了BUG,要理清自己的思路,不要在一些不切实际的地方浪费时间。 作为程序员要明白自己不可能写出完美的软件,但是你可以让自己的程序变得更好,所以当有问题出现时不要害怕,去勇敢的解决他,你自己将会变得更加完美,能力将会更强。 学会断言时编程,计算机是不会说谎的,跟它打交道比与人更简单,它会如实的反应你的问题,你只需要改正就可以了。因此在编程是不要进行自我欺骗,而是尽快找到它的问题,加以解决,而断言则可以帮助你更好解决这一问题。 注重实际的程序员谁也不信任,包括我们自己。 来源: https://www.cnblogs.com/haheihei/p/11731605.html

Android源码分析之SharedPreferences

谁说我不能喝 提交于 2020-01-24 02:38:07
  在Android的日常开发中,相信大家都用过SharedPreferences来保存用户的某些settings值。Shared Preferences 以键值对的形式存储私有的原生类型数据,这里的私有的是指只对你自己的app可见的,也就是说别的app是无法访问到的。 客户端代码为了使用它有2种方式,一种是通过Context#getSharedPreferences(String prefName, int mode)方法, 另一种是Activity自己的getPreferences(int mode)方法,其内部还是调用了前者只是用activity的类名做了prefName而已, 我们先来看下Conext#getSharedPreferences的内部实现。其具体实现在ContextImpl.java文件中,代码如下: @Override public SharedPreferences getSharedPreferences(String name, int mode) { SharedPreferencesImpl sp; // 这个是我们接下来要分析的重点类 synchronized (ContextImpl.class) { if (sSharedPrefs == null) { // sSharedPrefs是一个静态的ArrayMap,注意这个类型

Android Studio 源码分析

与世无争的帅哥 提交于 2020-01-24 02:36:28
android实现按钮跳转到指定网页 res/layout: <Button android:text="Button" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button6"/>app/java/MainActivity.java package com.ouyang.android.myapplication;import android.content.Intent;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import java.net.URL;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R

构建内核树

冷暖自知 提交于 2020-01-24 01:58:14
环境 :ubuntu 用途:linux设备驱动编程环境 步骤: 1.查找可用内核源码 apt-cache search linux-source 2.下载内核源码 sudo apt-get install linux-source-XX,下载到/usr/src 3.解压缩源码 4. make oldconfig 配置内核,用默认的配置 //从目前正在运行的系统中生成一份.config文件,以此替代make config后生成.config的工作。当然,也可手动从目前运行内核中拷贝.config到新内核目录中。 make menuconfig make bzImage make modules make modules_install //安装外挂模块 make install //安装新内核 5.最后,配置设备驱动程序的Makefile,指定内核源码路径 来源: https://www.cnblogs.com/yemeng/p/3383206.html

Java的Interger源码阅读

放肆的年华 提交于 2020-01-24 01:26:50
转载自 http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值。Integer 类型的对象包含一个 int 类型的字段。 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。 类定义 public final class Integer extends Number implements Comparable<Integer> 从类定义中我们可以知道以下几点: 1、Integer类不能被继承 2、Integer类实现了Comparable接口,所以可以用compareTo进行比较并且Integer对象只能和Integer类型的对象进行比较,不能和其他类型比较(至少调用compareTo方法无法比较)。 3、Integer继承了Number类,所以该类可以调用longValue、floatValue、doubleValue等系列方法返回对应的类型的值。 属性 一、私有属性 Integer类中定义了以下几个私有属性: private final int value; private static final long serialVersionUID = 1360826667806852920L;

STL源码分析之Map

南笙酒味 提交于 2020-01-24 01:26:24
map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的,在map的红黑树中排序依据是键值,所以其键值也不能修改,来看其具体的源码 定义 template <class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map { public: typedef Key key_type; typedef T data_type; typedef T mapped_type; typedef pair<const Key, T> value_type; //const key,不可修改 typedef Compare key_compare; //比较函数 private: //定义红黑树别名 typedef rb_tree<key_type, value_type, identity<value_type>, key_compare, Alloc> rep_type; rep_type t; public: typedef typename rep_type::const_pointer pointer; typedef typename rep_type::const_pointer const_pointer; typedef typename

java8 object源码

久未见 提交于 2020-01-24 01:13:16
Object类中大部分都是用 native 修饰的方法 这个关键字修饰的方法底层是c/c++编写的程序编译后dll文件,java加载dll文件后,可用通过本地方法调用dll中函数. public class Object { //非native方法 public boolean equals(Object obj) { return (this == obj); } public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } //虽然不是native方法但是最终都调用了native方法 public final void wait(long timeout, int nanos) throws InterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException("nanosecond timeout value out of range"); } if