不要放弃尝试新鲜事物,如果有机会,尽同能的去做以前你没有做过的事情。因为,你已经按照现在这样的生活模式生活了很久,继续重复以往的习惯和节泰的话,是不可能有奇迹发生,是不可能忽然你就一下子改变了。你需要主动去做出突破和尝试,改变的本质是:你开始去做那些你以前不会去做的事情。换个地方写作,鼓起勇气和陌生人搭讪,一直都很紧张不如索性这些,都可能是令你的生活发生改变的契机。但重点是,如果你不主动开始芸试,那么这些契机永远不会到来!! 2022-09-08重新拾起这个博客的账号,以后每天都会更新,欢迎持续关注。
目录一、前景回顾二、用C语言编写内核三、加载内核四、运行测试 一、前景回顾 本回开始,我们要开始编写内核代码了,在此之前,先梳理一下已经完成的工作。 蓝色部分是目前已经完成的部分,黄色部分是本节将要实现的。二、用C语言编写内核 为什么要用C语言来编写内核呢,其实用汇编语言也可以实现,只是对于我们来讲,看C语言代码肯定要比汇编语言更容易理解,看起来也没那么费劲。所以用C语言可以更加省事。 先来看看我们内核代码的最初形态,首先在项目路径下新建一个project/kernel的目录,以后我们内核相关的文件都存放于此,在该目录下新建一个名为main.c的文件,在main.c中键入如下代码:
目录一、前景回顾二、用C语言编写内核三、加载内核四、运行测试 一、前景回顾 本回开始,我们要开始编写内核代码了,在此之前,先梳理一下已经完成的工作。 蓝色部分是目前已经完成的部分,黄色部分是本节将要实现的。二、用C语言编写内核 为什么要用C语言来编写内核呢,其实用汇编语言也可以实现,只是对于我们来讲,看C语言代码肯定要比汇编语言更容易理解,看起来也没那么费劲。所以用C语言可以更加省事。 先来看看我们内核代码的最初形态,首先在项目路径下新建一个project/kernel的目录,以后我们内核相关的文件都存放于此,在该目录下新建一个名为main.c的文件,在main.c中键入如下代码:
目录建表数据存储主键和索引在查询中的表现主键的选择选择与排序键不同的主键索引和分区在查询中的应用部分单调主键的使用跳数索引可用的索引类型并发数据访问列和表的TTL列TTL表TTL删除数据使用多个块设备进行数据存储配置虚拟列资料分享参考文章Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(MergeTree)中的其他引擎。MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。主要特点存储的数据按主键排序。
目录建表数据存储主键和索引在查询中的表现主键的选择选择与排序键不同的主键索引和分区在查询中的应用部分单调主键的使用跳数索引可用的索引类型并发数据访问列和表的TTL列TTL表TTL删除数据使用多个块设备进行数据存储配置虚拟列资料分享参考文章Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(MergeTree)中的其他引擎。MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。主要特点存储的数据按主键排序。
编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。程序介绍由于Go中缺少类和继承等OOP特性,所以无法使用Go来实现经典的工厂方法模式。不过,我们仍然能实现模式的基础版本,即简单工厂。案例中使用工厂结构体来构建多种类型的武器。因此工厂方法模式代码使用C#表示。Gun:AK47gunPower:4Gun:MusketgunPower:1程序代码、简单工厂模式Golang首先,创建一个名为iGun的接口,其中将定义一支枪所需具备的所有方法。然后是实现了iGun接口的gun枪支结构体类型。两种具体的枪支——ak47与musket火枪——两者都嵌入了枪支结构体,且间接实现了所有的i
编程旅途是漫长遥远的,在不同时刻有不同的感悟,本文会一直更新下去。程序介绍由于Go中缺少类和继承等OOP特性,所以无法使用Go来实现经典的工厂方法模式。不过,我们仍然能实现模式的基础版本,即简单工厂。案例中使用工厂结构体来构建多种类型的武器。因此工厂方法模式代码使用C#表示。Gun:AK47gunPower:4Gun:MusketgunPower:1程序代码、简单工厂模式Golang首先,创建一个名为iGun的接口,其中将定义一支枪所需具备的所有方法。然后是实现了iGun接口的gun枪支结构体类型。两种具体的枪支——ak47与musket火枪——两者都嵌入了枪支结构体,且间接实现了所有的i
一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6char*m_pstr;7};这种实现方式,在需要对字符串进行频繁复制而又并不改变字符串内容时,效率比较低下。如果对一块空间只是进行读,就没必要采用深拷贝,当需要进行写的时候,再使用深拷贝申请新的空间2、写时复制(浅拷贝+引用计数) 当只是进行读操作时,就进行浅拷贝,如果需要进行写操作的时候,再进行深拷贝;再加一个引用计数,多个指针指向同一块空间,记录同一块空间的对象个
一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6char*m_pstr;7};这种实现方式,在需要对字符串进行频繁复制而又并不改变字符串内容时,效率比较低下。如果对一块空间只是进行读,就没必要采用深拷贝,当需要进行写的时候,再使用深拷贝申请新的空间2、写时复制(浅拷贝+引用计数) 当只是进行读操作时,就进行浅拷贝,如果需要进行写操作的时候,再进行深拷贝;再加一个引用计数,多个指针指向同一块空间,记录同一块空间的对象个
本文例子参考《STM32单片机开发实例——基于Proteus虚拟仿真与HAL/LL库》源代码:https://github.com/LanLinnet/STM32F103R6项目要求通过定时器中断的方式,实现流水灯的效果。硬件设计在第一节的基础上,在Proteus中添加电路如下图所示。在上一节定时器阻塞延时的基础上,我们在本项目中同样使用TIM3进行中断。时钟频率采用默认的8MHz,我们不妨设置PSC为3999,ARR为999,那么此时可以计算出TIM3的计数脉冲周期为\(T_{CNT}\)为0.5ms,一次中断的溢出时间\(T_{OUT}\)为0.5s。打开CubeMX,建立工程。我们首先将