LuXts个人博客


记录环境搭建,开发中各种操作经过的博客。会放上投稿。

学习路径

0 条评论 默认分类 无标签 LuXts

文章用于记录2019年以来的计算机学习生活
列出来的内容都是觉得推荐的
还有很多自己不太喜欢的就没写上去

2019年

这一年我真正踏入了程序员之路。

这一年看的书:

  1. 《Linux C编程一站式学习》
    这是一本开源书籍,里面讲解的关于 C 语言深处的奥秘对我启发很大。推荐看完第一第二章,并且认真做完练习题。第三章觉得 Linux 系统太难的可以不看。
  2. 《算法图解》
    这是一本基础算法书。整本书其实都不算太难,用 C 语言实现这本书的很多例子对我帮助很大。

这一年做的比较有意义的事情:

  1. 用双向链表实现了贪吃蛇,虽然不是很难,但是锻炼了能力而且培养了信心。
  2. 跟随 Milo Yip 老师的 「 从零开始的 JSON 库教程 」 实现了一个 C 语言的 JSON 解析库,老师讲得非常好,学习到了很多平时练习学不到的东西。知乎上也能找到这个教程。
  3. 在电脑上安装了一个 Linux 系统,对这个系统的了解更深刻了,想练习 vim 不过失败了(233333)。

这一年遗憾的事情:

  1. 没有认真学习算法,没有刷刷 ACM 的比赛题目。虽然对竞赛兴趣不大,但是感觉可以练习一下。
  2. 玩游戏太多了没有静下心学 C++ 。
  3. JSON 库的完成没赶上期末作业。

2020年

这一年刚刚开始。

这一年看的书:

  1. 《C++ Primer 中文版(第 5 版)》
    这是一本入门 C++ 用的数据,不过偏难,如果觉得难可以看这本 《C++Primer Plus》 。多了一个 Plus ,内容更适合初学者(指没有学过 C )了。
  2. 《C++ Templates中文版》
    虽然是本老书,但是对我来说是很实用的 C++ 模板教材。

这一年看的别的内容:

  1. 「 面向对象程序设计-C++ 」
    翁恺老师上的课非常非常不错!!!能免费看真是有福气。
  2. 「 C++那些事 」
    讲得很不错,适合查漏补缺。

这一年做的比较有意义的事情:

  1. 学习了 Git 版本管理。这个真的非常非常有用,强烈推荐。到哪里学都可以,推荐在这个地方学习: Learn Git Branching
  2. 开始规范化自己的代码。

这一年的期望:

  1. 更加深入学习 Linux 系统的相关知识。
  2. 学好数据结构。
  3. 刷刷 ACM 算法题。
  4. 少掉点头发。
  5. 更换所有项目的调试输出为日志系统。(摆脱IDE依赖)
  6. 能看懂 《算法导论》

记录一个好玩的日志库

0 条评论 C++学习 日志 LuXts

这是一个print()函数爱好者的福音

本文翻译自Readme.md


下载地址

点我直达


特性说明

  1. 易于阅读的彩色输出(当输出不是交互式终端时,颜色将自动禁用)
  2. 打印文件名,行号,函数名和原始表达式
  3. 打印类型信息
  4. 专门用于容器,指针,字符串文字,枚举和 std::optional 等的格式化输出。
  5. 可以在表达式内部使用
  6. 包含编译期间警告(防止忘记删掉这个库)
  7. 兼容 C++11, C++14, C++17 。

安装方法

  1. 直接复制 dbg.h 到系统/编译器的 include 目录。
  2. 如果不想随意更改include 目录,可以尝试安装 dbg-macro 软件包

额外说明

可以通过 #define DBG_MACRO_DISABLE 禁用 dbg()
可以通过 #define DBG_MACRO_NO_WARNING 禁用编译期间警告


示例代码

#include <vector>
#include <dbg.h>

// You can use "dbg(..)" in expressions:
int factorial(int n) {
  if (dbg(n <= 1)) {
    return dbg(1);
  } else {
    return dbg(n * factorial(n - 1));
  }
}

int main() {
  std::string message = "hello";
  dbg(message);  // [example.cpp:15 (main)] message = "hello" (std::string)

  const int a = 2;
  const int b = dbg(3 * a) + 1;  // [example.cpp:18 (main)] 3 * a = 6 (int)

  std::vector<int> numbers{b, 13, 42};
  dbg(numbers);  // [example.cpp:21 (main)] numbers = {7, 13, 42} (size: 3) (std::vector<int>)

  dbg("this line is executed");  // [example.cpp:23 (main)] this line is executed

  factorial(4);

  return 0;
}

更多说明

请查看项目地址


本站分流

V0.3.0

2020.01.06

  • Added dbg::type() helper to directly print type names

dbg-macro-0.3.0.tar.gz
[dbg-macro-0.3.0.zip](https://luxts-tuchuang.oss-cn-chengdu.aliyuncs.com/uploads/2020/02/dbg-macro-0.3.0.zip "dbg-macro-0.3.0.zip


单片机原理图需要的库

0 条评论 电路设计 无标签 LuXts

沙雕群友欢乐多。大家来找 2803 。

  咳咳言归正传,这次画原理图呢,我发现搞懂 74HC595 之后不是很 ,但芯片是真的难找。所以我决定牺牲小我成就大我。(瞎扯)
  以下是我的原理图中用到的芯片及来源库,你们可以放心下载,无毒无黄。如果问有了库怎么导入之类的,我推荐这个 网站 ,我也在用,特别好用。至于这些库怎么来的,有的来自群文件,有的我去下载下来的。

IAP15W413AS --> 下载地址

库内芯片为 STC15W401AS_SOP28_TSSOP28_SKDIP28

74HC595 --> 下载地址

库内芯片为 74HC595

ULN2803 --> 下载地址

库内芯片为 ULN2803A


SN74HC595理解

0 条评论 电路设计 无标签 LuXts

74HC595管脚定义

原理图

  • QA~QH 输出

    1,2,3,4,5,6,7,15 管脚

  • GND 电源地「被省略」

    8 管脚

  • SQH / QH1 串行数据输出管脚

    9 管脚

  • SCLR / SRCLR 移位寄存器清零端

    10 管脚

  • SCK / SRCK 数据输入时钟线

    11 管脚

  • RCK 输出存储器锁存时钟线

    12 管脚

  • OE / G 输出使能

    13 管脚

  • SER / SI 数据线

    14 管脚

  • VCC 电源端「被省略」

    16 管脚


管脚效果

  1. QA~QH 全部都是输出端。
  2. OE / G 相当于输出控制,低电平时芯片将对 QA~QH 输出。

    我原本还以是高电平时输出来着。:joy:

  3. SCLR / SRCLR 低电平时对移位寄存器数据复位,所以一般也把 SCLR / SRCLR 接上电源端。
  4. SCK / SRCK 给脉冲的时候会将移位寄存器的数据后移一位并将 SER / SI 管脚的电平写入移位寄存器的第一位。
  5. RCK 高电平时将移位寄存器的数据移入存储寄存器,下降时存储寄存器数据不变。
  6. SER / SI 数据管脚,输入数据用
  7. SQH / QH1 电平与数据管脚完全一致,用于多芯片输入。

用途及思路

以下为我个人思路,如有错误欢迎指正。

  首先这是一个在八个输出管脚上输出的芯片,输出的内容取决于存储寄存器的值。当存储寄存器内部值为 01100000 时,意味着 QA , QB 管脚输出高电平,而其他输出管脚输出低电平。
  移位寄存器是为了起到一个临时储存区的用途。如果直接修改存储寄存器的值,那么可以想到输出的内容将发生闪烁「因为输出是基于存储寄存器的」。为了解决这个问题,先将数据通过 SER / SISCK / SRCK 输入到移位寄存器,再通过 RCK 将移位寄存器的值一次性写入到存储寄存器,避免闪烁的出现。
  至于 SQH / QH1 这个管脚,是输出溢出的数据,比方说输入高低高低高低高低八个电平,再输入任意一个信号,就会将第一个输入高电平输出至 SQH / QH1 ,也就是说可以将上一个 74HC595 的 SQH / QH1 接上下一个 74HC595 的 SER / SI 实现用一根数据线写入所有的 74HC595 ,节省管脚。


c语言一些值得记住的代码片段

0 条评论 C语言学习 无标签 LuXts

这是一些平时遇到觉得不错的代码片段

或者说是从别人那里抄来的

  • 首先是从大佬那里学来的宏函数技巧
#define SDB( i, start, end ) for ( i = start; i < end; i++ )
  • 然后是程序员必备快速排序的代码

    我没背下来。。。


void Swap( int arr[], int low, int high )
{
    int temp;
    temp        = arr[ low ];
    arr[ low ]  = arr[ high ];
    arr[ high ] = temp;
}

int Partition( int arr[], int low, int high )
{
    int base = arr[ low ];
    while ( low < high )
    {
        while ( low < high && arr[ high ] >= base )
        {
            high--;
        }
        Swap( arr, low, high );
        while ( low < high && arr[ low ] <= base )
        {
            low++;
        }
        Swap( arr, low, high );
    }
    return low;
}

void QuickSort( int arr[], int low, int high )
{
    if ( low < high )
    {
        int base = Partition( arr, low, high );
        QuickSort( arr, low, base - 1 );
        QuickSort( arr, base + 1, high );
    }
}
  • 其他的以后再补充

c语言曾经踩过的坑记录

0 条评论 C语言学习 无标签 LuXts

记录一些学习中的蠢事。

  • typedef 如果只接名字,默认补全int
    例子:
     typedef Students;
     //两者等价。
     typedef int Students;

2019-11-07 博客创建

0 条评论 默认分类 无标签 LuXts

今天是这个博客初创的日子。希望我能坚持几年写博客。