0%

蓝牙模块

基础设置

  • 波特率:要低于38400,否则会出现乱码

  • BT.read()一次只能读取1个字节, 长字节需要拼接

  • 读取数据:parseInt()将接收转为int数

AT模式

  • 断开开发板的电源,长按蓝牙模块按钮,进入AT模式

  • 代码如下。输入AT,若返回为OK则证明没有问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <SoftwareSerial.h>

    #define RxD 10
    #define TxD 11

    //SoftwareSerial BTSerial(RxD, TxD);
    #define BTSerial Serial3

    void setup(){
    // replace BAUDRATE as suggested
    BTSerial.begin(38400);
    Serial.begin(38400);
    BTSerial.print("AT\r\n");
    }

    void loop(){

    if (BTSerial.available())
    Serial.write(BTSerial.read());

    if (Serial.available())
    BTSerial.write(Serial.read());

    }

综述

自来到国科大杭高院,已过去一年零三个月的时间,于是复盘一下这一年的得与失。

最近一直在为过去的失而愁眉不展,忧心忡忡,经常情绪低落,不知所措。好在有王医生一直在身边陪伴,如她所说:世界都变得明亮。

得与失

  • 考上了国科大的研究生

  • 找到了一个可爱又漂亮的女朋友

  • 具有了软件与硬件的双重背景

  • 失去了去软件所的机会

  • 失去了去国科大本部的机会

  • 可能失去了读博的机会

  • 失去了进行基础方向科研的机会

  • 不能去北京,还要何女朋友异地一年(2022.7)

分析

至今不知道自己是否适合读博,但是综合考量来看,工作或许是最佳选择——穷。话说回来,即便985本硕都只能去做开发,自己还有什么不满意的呢?本来自己读研就是想去工作的呀。

不过最近整个互联网行业不太景气,到处都在裁员。而自己在这个时候,凑巧接触到了硬件行业,真不知道是特么的幸运还是不幸。

没能去软件所确实是会感到可惜,没能做自己想做的基础方向也略有些失望。但是,即便自己去了软件所,就一定会很好很好吗?就算做了基础方向的研究,就拥有自己的自由了吗?何况科研界离工业界还有一些距离。

根本原因:自己反复横跳,对目标不够坚定。要记得,行百里者半九十。

选择

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。

综合自身优势:

  • 中国科学院大学研究生

  • 具有软硬件双重背景

  • 具有一定的编码能力

综合任务:

  • 计算机底层基础专业书籍

  • 一生一芯——在自己的芯片上运行自己的操作系统

  • openEular开源实习

  • 软件所开源之夏——openEular社区项目

综合任务时间:

  • 一生一芯(2022年6月~2023年1月)

  • 软件所开源之夏

gantt
title 任务综合时间规划
dateFormat YYYY-MM-DD

    section Super项目
        OpenEular开源实习 : oe, 2022-08-01, 120d
        一生一芯 : ysyx, 2022-07-01, 270d
        开源之夏 : oepnSummer, after ysyx, 90d
    section 学习任务
        Leetcode: leetcode, 2023-01-01, 240d
        计算机基础: fun, 2022-06-15, 360d
    section 组内项目
        科技部项目: kejibu, 2022-07-01, 180d

进程相关

  • 找到指定进程
    1
    ps -ef | grep thread-name

基本步骤

代码模板

  • 顶层CPP模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    #include <stdio.h>
    #include <stdlib.h>
    #include "verilated_vcd_c.h"
    #include <Vtop.h>

    int main(int argc, char **argv, char **env)
    {
    // Prevent unused variables
    if (false && argc && argv && env) {}

    const std::unique_ptr<VerilatedContext> contextp{new VerilatedContext};

    // Module
    Vtop *top = new Vtop;

    Verilated::traceEverOn(true);
    VerilatedVcdC* tfp = new VerilatedVcdC;
    top->trace(tfp, 0);
    tfp->open("simx.vcd");

    while (contextp->time() < 20 && !contextp->gotFinish())
    {
    // simulation code
    ……

    contextp->timeInc(1);

    top->eval();

    tfp->dump(contextp->time());
    }

    top->final();
    tfp->close();
    delete top;

    return 0;
    }

执行

  • command

    1
    2
    3
    4
    5
    6
    # trace generate a wave file
    verilator -Wall top.v sam.cpp --cc --trace --exe --build
    # compiles
    make -C obj_dir -f Vtop.mk Vtop
    # run
    ./obj_dir/Vtop
  • files

  • wave

总结

待更新…………

在写程序的时候,我们不可避免会出现这样或那样的问题,比如:这个报错日志是什么意思?为什么会出现这个问题?这个问题该怎么去解决?

回想起在大一时,第一次学习编程语言的我,遇到了个“非常棘手”的问题,看着其他同学都跑出了正确的结果,我的心里非常着急。印象中那个代码是这样的:

1
2
3
4
5
6
7
int mian() {
int a = 0;
int b = 3;
int c = a + b
printf("%d", d);
return 0;
}

当然,现在看起来,这个问题显得十分幼稚。但是当时看到奇怪的报错,确实是一筹莫展。

其实说起来,我并不是一个善于提问的人,相比之下我更喜欢独自解决问题,这就导致有时候进度会比较慢。

当时采取了一种非常笨的方法:一字一句的去比对,最终发现main方法名字写错了,并且程序中少了个分号。

当时为什么没有直接向老师询问呢?因为我考虑到了,这样简单的一段程序,出现的错误肯定不会复杂到哪里去,一定是属于自己能解决的问题,还有就是,如果我问出了这个问题,一定会显得十分愚蠢。后来发现,确实如此。

大概就是从这次开始,我养成了遇到Bug先自己解决、解决不了就去搜索的习惯,到现在,我依然受益于这样的习惯。

在考研上岸后,我活跃于QQ群,解答准备考研的学弟学妹们的问题。一开始出于热情,倒是没觉得有什么,后来发现自己的热情越来越低。在阅读了这两篇文章后,我找到了症结所在。

在咨询我的问题中,绝大多数都是无效问题,诸如:国科大好考吗?复试难吗?有没有歧视呀?分数线是多少呀?……

一开始我还能够耐着性子回答一下,时间长了,神仙也遭不住。

所以,这两篇文章,对我不论是关于技术性问题的,还是诸如考研咨询,都有很大的启发。

好的提问,一定是经过自己深思熟虑、上下求索后都没有答案的问题,而不是问过且过的无效问题。

最近,研究STM32的SPI串口和ADC通信,调试许久STM32也无法成功接收到ADC的正确数据.无奈之下,只能一遍又一遍的读数据手册,最后发现,原来ADI的ADC芯片一般使用的都是非标准SPI,一次性发送20位数据,这就要对接收到的数据进行调整——原来坑的答案都在数据手册上……这让我深刻意识到数据手册是多么重要。

我是软件出身,大学里一直在闷头写软件,后端了解的比较多。基本上,自己遇到的问题,都是无数前辈已经遇到过的问题。去google上简单一搜索(关键字要正确),就算找不到标准的解决方案,但是也能够找到解决问题的思路,这一点对写软件十分重要。

由此可见,这个时代,给我们许多独立解决问题的渠道。在我看来,独立解决问题十分重要,这是一个工程师或者程序猿保持思维活跃的根本之道。

hexo配置

hexo开启mermaid渲染

  • _config.next.yml
    1
    2
    3
    4
    5
    6
    mermaid:
    enable: true
    # Available themes: default | dark | forest | neutral
    theme:
    light: default
    dark: dark
  • _config.yml
    1
    2
    3
    highlight:
    exclude_languages:
    - mermaid

原理图

PCB

原理图转PCB出现unknown pins怎么解决

取消勾选错误的网络链接,然后执行变更,随后再做一次update,即可成功

阅读全文 »

Overview(CMU-15-213)

程序如何运行,机器如何执行程序

  • 数字在计算机中如何表示(用有限的位组合形式表示在数域中无限扩张的数)

    • int类型(乘法和加法都有溢出的风险,但符合交换律
    1
    2
    计算机中表示50000*50000是负值
    计算300* 400 * 500 * 600是错误结果
    • float类型(浮点数取值范围极端以至于有些数字会消失)
    1
    取一个很大的数-他本身+3.14=3.14
    • 改变计算顺序:
    1
    1e20 + (-1e20+3.14)=0
  • 机器级代码的实现

    • 代码如何编程机器码
    • 如何在机器上执行
  • 分层存储系统

    • 数据在内存中如何布局,内存是如何访问的
  • 从程序角度增加其性能(低级优化)

    • 什么让程序运行更好
    • 什么会导致程序运行更差
  • 实现web服务器或者其他能力

阅读全文 »

网络文学的前世今生

看到这个封面,如果你看过这本书,我相信你的心中此时可能会是五味杂陈。
《坏蛋是怎样炼成的》这本书,是我看的第一本网络小说,也是留给我印象最深的一本书。我依然记得那是一本相当厚重的书(盗版实体书),8开的大开本,貌似有一千多页。和我今天每天要读的计算机类的书籍厚度大致相同,每当看到计算机类的书籍,我偶尔还是会想起那个抱着《坏蛋》疯狂阅读的年纪。
初次接触《坏蛋》是在初中的时候,就像前面说的,虽然具体的内容早已经忘记了,但是给我留下的印象却是我看过的小说中印象最深刻的。
我们今天探讨的并非《坏蛋》,而是承载《坏蛋》的载体——网络文学。

当今公认的网络小说的鼻祖,或者说是中国第一本网络小说——《第一次亲密接触》,于1998年发表于某BBS(论坛)。这本书一经连载,直接在网络上“卷起一片腥风血雨”,痞子蔡(本书作者)的知名度像一股热浪在网络上延烧开来,达到无国界之境。这本书,可以说是为后面网络文学的发展起到了直接促进的作用。

阅读全文 »