- 博客(312)
- 资源 (17)
- 收藏
- 关注
原创 Javascript的补充:Typescript、Rust、C/C++
浏览器只支持Javascript和WebAssembly,所以作为Javascript的补充,要么能够转换成Javascript,要么能转换成WebAssembly。补充Javascript的出发点有三:一、重复利用已经有的代码;二、为了避开Javascript是动态类型的坑;三、为了保密。
2020-12-06 16:45:19 654
原创 Javascript脱离回调地狱,利用生成器串行处理业务逻辑
当一个业务逻辑要有多次数据库操作时,使用回调函数的方式处理显然是地狱,利用ES6 生成器(generator)可以脱离回调地狱,使用串行的方式编写代码,而代码的执行依然是异步的。生成器可以实现直观的同步控制流,又不损失异步执行的高效率。
2020-12-04 15:54:49 252
原创 解决eCos系统的lwIP存在的bug,该bug导致TCP重发失效,最终导致TCP拒绝服务
跑 eCos + lwIP 的设备作为 TCP 服务器,在网络不繁忙不丢包的情况下,一切正常,在网络繁忙会出现丢包的情况下,重试几次后 TCP 拒绝服务(对 SYN 包都不会有任何响应, ping 功能可能正常也可能无响应),其它任务正常。原因是少了一个定时器,TCP 超时处理需要定时器。
2020-11-21 18:53:31 1873 2
原创 使用 gnuplot 绘制离散序列以及 DFT 结果
gnuplot 是个强大的绘图工具,用它绘制各种曲线再好不过了,包括绘制数字信号处理中的离散序列,以及各种变换的结果序列。
2020-09-09 17:36:51 536
原创 可以跑Linux的RISC-V计算机、微型电脑、单板机
RVBoards-D1-哪吒 某宝有售,搜索 rvboards 即可,699RMB。VisionFive 昉·星光线上发售,售价1100RMB。HiFive Unmatched 售价665美元。
2020-09-08 16:53:15 4259 2
原创 RISC-V 整数寄存器(x0~x31)与浮点寄存器(f0~f31)数据交换
RV32F、RV64F、RV64D 都有 fmv 指令可以做数据交换,RV32D 没有 fmv 指令可用,需要特殊处理。
2020-09-08 15:07:33 2541
转载 PCB设计中的SDRAM辐射干扰对策
某些使用外置SDRAM的STM32应用客户反映其产品在EMC测试中,存在由于SDRAM信号导致辐射干扰超标的问题。在终端产品中如果不能用机壳屏蔽辐射干扰,那么这类问题往往需要通过修改SDRAM信号的PCB设计来解决。
2020-07-27 10:40:43 1073
原创 使用SPI操作JTAG的两种方案
MCU没有可以直接操作JTAG的外设,一般情况下,可以使用IO模拟来操作JTAG,但是IO模拟速度比较慢。SPI是与JTAG最接近的外设,可以使用SPI来加速JTAG的操作。然而SPI的4根信号(CS、SCK、MISO、MOSI)与JTAG的4根信号(TCK、TMS、TDI、TDO)并不对应,所以不能直接使用,还要一些特殊的处理。
2020-06-20 10:21:33 4340 1
原创 Rust的枚举还实现了C语言的联合(union)的特性
Rust的枚举特性还实现了C语言的联合的特性,这在一些情况下,可以简化代码。下面这段Rust定义枚举的代码:enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32),}参考:Enum Values在C语言中相当于以下代码:typedef enum{ Quit, Move, Write, ChangeColor}MessageType;
2020-06-05 13:35:25 1771
原创 Rust中的常量、变量、mut变量
Rust的常量Rust的常量和C语言中的常量基本一样,常量只能赋值编译时就能计算出来的表达式,不可以是函数返回值、变量的计算值等。Rust的常量必须指定类型。Rust的常量要求使用大写字母,如果使用小写字母,会产生编译警告。C语言中一般会使用大写字母定义宏,Rust的常量和C语言中的常量宏差不多。参考Differences Between Variables and ConstantsRust的变量Rust的变量只能赋值一次,但与常量不同,变量可以赋值运行时才能计算的表达式,可以是函数返回
2020-05-22 11:44:01 1468 1
原创 Rust的宏与C语言的宏
宏可以说是C语言的双刃剑,C语言中的宏提供诸多便利,但同时也带来了很多陷阱。Rust保留了宏的概念,但是比C语言的宏有了不少改进。宏与函数的区别无论在Rust中,还是C中,宏都可以实现函数的作用。但是在C语言中,函数式的宏和真正的函数是难以区分的,即调用函数式的宏和调用真正的函数的形式是一样的。而在Rust中,调用函数式的宏和调用真正的函数的形式是相区分的,如果将宏作为函数来调用,那么宏名的后面要加感叹号,例如最经常出现的 println!,比C语言多出来的感叹号明确了这是一个宏而不是函数。代码
2020-05-22 11:43:41 1077
原创 外设的驱动模式:中断、轮询
驱动程序的基本形式是中断模式。关闭中断可以形成轮询模式。轮询模式可以是忙等待轮询和择机轮询。忙等待持续轮询状态,直到完成,这期间主循环不能处理其它事务。择机轮询检测到未完成时将退出,转而处理其它事务,当有空闲时再次轮询,需要借助状态机实现保存和恢复上下文。中断配合操作系统形成挂起等待模式。协程是对择机轮询的简化。事件驱动模型是中断模式的泛化。...
2020-05-19 13:10:13 674
原创 使用国内镜像解决 Rustup 和 Cargo 连接超时问题
sh.rustup.rs 连接超时解决办法wget https://cdn.jsdelivr.net/gh/rust-lang-nursery/rustup.rs/rustup-init.shsh rustup-init.shRustup 连接超时解决办法RUST安装慢怎么办,使用镜像方式安装Rustup 镜像使用帮助Cargo 连接超时解决办法Rust Crates 镜像使用帮助...
2020-05-09 10:29:24 6269 1
原创 对并发的思考
并发分成伪并发和真并发伪并发系统只有一个处理器,但执行多个任务,在某个瞬间,处理器只能执行一个任务,为了“同时”执行多个任务,将多个任务快速的来回切换,只要速度足够快,就会感觉这几个任务是同时执行的。从宏观上讲,伪并发是并发的,从微观上讲,伪并发是串行的。真并发有多个处理器,在某个瞬间是有多个任务同时在执行的。复杂系统往往是真并发和伪并发共存,系统中包含多个处理器,其中的每个处理器同时又...
2020-03-13 09:42:18 279
原创 协程的本质
协程是简化状态机设计的一种工具。协程编程表面上看起来与多线程编程很相似。协程与多线程有着本质的区别:协程不会抢占,任务之间是协作式的,多线程的任务之间往往是抢占式的。协程没有上下文切换,协程只有函数的进入和退出,没有多线程的上下文切换。协程没有调度器,任务间的协调完全由应用来决定。协程也是实现多任务的一种形式。...
2020-03-13 09:26:27 615
原创 SOT-23、SOT-223封装的三极管、MOS管
SOT-23、SOT-223封装的三极管、MOS管SOT-23三极管无论是PNP还是NPN,1脚为基极,2脚为发射极,3脚为集电极。MOS 管无论是P沟道还是N沟道,1脚为栅极,2脚为源极,3脚为漏极。SOT-223三极管无论是PNP还是NPN,1脚为基极,3脚为发射极,2、4脚为集电极。有些封装2脚伸出可焊接,有些封装2脚悬空。MOS 管无论是P沟道还是N沟道,1脚为栅...
2020-01-07 13:29:30 29553
原创 天线的种类
天线的种类弹簧天线棒状天线PCB天线板载天线陶瓷天线玻璃钢天线弹簧天线低成本。直接焊在PCB上。棒状天线比较常见。一般SMA接头。也有引线加IPEX接头。PCB天线一般IPEX接头。板载天线PCB天线的一种,讲天线与电路的其它部分制作在同一块PCB上,蓝牙通常使用这种天线。陶瓷天线贴片安装。陶瓷介电常数较PCB板高,所以使用陶瓷天线能有效缩小天线尺寸;在介电损耗方面,...
2019-12-25 10:14:35 2531
原创 Windows 7 通用 CDC 串口驱动程序
Windows 7 通用 CDC 串口驱动程序Windows 7 自带 CDC 串口类设备的驱动程序文件 usbser.sys,所缺的是驱动配置文件 usbser.inf 文件,将 Windows 10 的 usbser.inf 文件拷贝到 Windows 7,注释掉 SourceDisksNames 和 SourceDisksFiles 部分就可以作为 Windows 7 的 CDC 串口类...
2019-11-02 22:22:12 28348 13
原创 RV-LINK:NucleiStudio 使用 RV-LINK 调试 RISC-V 程序
NucleiStudio 本质上是 Eclipse,按照 Eclipse 的做法就可以了。
2019-09-28 10:56:53 1011
原创 RV-LINK:Eclipse 使用 RV-LINK 调试 RISC-V 程序
Eclipse 使用 GDB Hardware Debugging 类调试配置使用 RV-LINK,JTAG Device 选择 Generic Serial,GDB Connection String 填入 RV-LINK 串口号。
2019-09-28 10:56:31 1756 1
原创 RV-LINK:GDB 使用 RV-LINK 仿真器调试 RISC-V 程序
准备作为仿真器的开发板,下载 GDB,安装 USB 串口驱动,将 RV-LINK 烧入开发板,于是开发板变身 RISC-V 仿真器!
2019-09-28 10:56:08 4451 1
原创 RV-LINK:将 Longan Nano 开发板变成 RISC-V 仿真器
Longan Nano 烧入 RV-LINK 固件,将 Longan Nano 开发板变成 RISC-V 仿真器。
2019-09-28 10:55:40 2025 1
原创 RV-LINK:将 GD32VF103C-START 开发板变成 RISCV-V 仿真器
将 RV-LINK 固件烧入 GD32VF103C-START,将 GD32VF103C-START 变成 RISC-V 仿真器。
2019-09-28 10:55:07 2488
原创 RV-LINK:用RISC-V开发板做RISC-V仿真器
用基于RISC-V的MCU开发板来实现RISC-V的仿真器,取名RV-LINK。用 GD32VF103C-START 和 Longan Nano 实现了调试功能,可以调试 GD32VF103。
2019-09-25 22:25:43 4036 4
原创 RV-LINK:GD32VF103 问题:JTAG 引脚重映射、TAP 链定义等
在开发 RV-LINK 过程中发现的 GD32VF103 存在的问题。
2019-09-25 21:18:44 2545 1
原创 RV-LINK:输出非预期响应向 GDB 报告错误
通过返回非预期的响应,GDB 将会检测到非预期响应,并报告响应的内容,可以利用这个特性,向 GDB 报告错误。
2019-09-12 14:29:09 1265
原创 RISC-V GCC:-specs=nano.specs 的作用
nona.specs 将 `-lc` 替换成 `-lc_nano`,使有精简版的C库替代标准C库,可以减少最终程序映像的大小。
2019-09-11 09:50:36 8734
转载 RISC-V:__global_pointer$
The linker uses the `__global_pointer$` symbol definition to compare the memory addresses and, if within range, it replaces absolute/pc-relative addressing with gp-relative addressing, which makes the code more efficient.
2019-09-10 16:30:47 3876
原创 RISC-V:-mcmodel=medlow vs -mcmodel=medany
`-mcmodel` 对 RV32 没什么影响,对 RV64 有影响。不指定 `-mcmodel` 的情况下,默认是 `medlow`。对于 RV32,不用刻意指定 `-mcmodel`。
2019-09-10 15:46:53 4043
原创 截获 GDB 与 OpenOCD/GDB Server 之间的数据
可以用 socat ,也可以用 GDB 的 remotelogfile 截获 GDB 与 OpenOCD 之间的数据。
2019-09-04 08:46:51 1601
exFAT file system specification.pdf
2019-10-28
《开放指令集与开源芯片发展报告》(已创建书签)
2019-01-17
Linux设备驱动程序(第3版)(英文版)(已添加书签)
2016-03-21
eCos配置工具,支持多仓库,支持中文字符显示,支持第三方编译器
2014-10-11
Eclipse RCP深入浅出(原书第2版)配套源代码
2014-01-07
eCos组件——中断堆栈信息获取支持
2013-11-26
eCos案例之HelloWorld
2013-10-21
《学习 MISRA C》系列连载讲座
2010-06-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人