生如春花之绚烂,逝如秋叶之静美

Vercel Serverless 与 Flask 体验

前段时间有个小应用要部署上线,倒也不复杂:接口收到前端请求之后返回一张动态生成的图片就行。

由于 没有服务器只能白嫖 想要体验世界上最流行、先进的 Serverless 函数计算,正好博客部署在 Vercel,所以看了看 Vercel 的官方 Documentation,发现他们也可以部署一些函数计算,支持的语言有:

  • Node.js
  • Go
  • Python
  • Ruby

我对 Python 比较熟悉,于是就顺手用 Flask 写了一个服务;部署时候遇到了一些坑,在这里记录一下。

Vercel Serverless 与 Flask 体验

ucos 原理 - 任务调度分析

上面说过了 uCOS-II 通过不断的在任务之间切换实现任务调度,这一个小节我们来分析 uCOS-II 到底是如何调度任务的。

首先我们要清楚,既然用户给定的任务是一个个无穷循环,所以操作系统肯定不能指望任务自己放弃 CPU 的使用权,让给其他的函数去执行;相反的,当一个任务执行一段时间之后,我们的 OS 就需要“强行的”从它手里拿到处理器的时间,这样的操作系统被称为 抢占式 的,相反那种不同任务之间 Co-operate 的,就叫做 非抢占式 的。

可我们的 OS 是怎么做到 “抢占” 的动作呢?

ucos 原理 - 任务调度分析

uCOS 原理 - 任务概览

uCOS-II 中的一个重要组成部分就是 任务,因为大多数嵌入式设备的处理器能力有限,所以大多的 RTOS 都采用了多进程/单线程模型;这就意味着 OS 需要通过在不同的任务之间切换,而如何创建、管理任务就成为了一个重要的组成部分。

任务基础

uCOS-II 的任务通常就是一个无限的循环,就像我们在裸机编程时使用的循环一样:

1
2
3
4
5
void task(void* pdata) {
while (true) {
/* Working code */
}
}

那么问题就来了,既然每个任务都是无穷循环,如何从一个任务跳转到另一个任务中呢?

uCOS 原理 - 任务概览

图论 - Floyd 算法

Floyd-Warshall 算法是图论中的一个经典多源最短路径算法,今天我和大家一起来学习这个算法。

我不想像其他能查到的大部分介绍该算法的中文文章一样,直接贴算法代码;相反,我想和大家一起讨论这个算法的思想,并且证明它的正确性。

图论 - Floyd 算法

uCOS 原理 - 临界段代码保护

在 Cortex 内核中有着大量的中断向量,当中断被设置并且发生的时候,系统就会从 Thread 模式切换至 Handler 模式;而 NVIC 则保证了中断可嵌套。

但是有的时候我们希望某些代码的执行过程中不要被中断,这些代码被称为临界段代码 Critical Section;那么,在 uCOS 中,系统又是如何做到的呢?

uCOS 原理 - 临界段代码保护

穷是原罪

文章不够正能量,希望大家看看就图一乐。

穷是原罪

柳拜 «За тебя, Родина-мать» 歌词翻译

很喜欢这首《За тебя, Родина-мать》,歌名翻译过来是《为了您,祖国母亲》

这首歌是俄罗斯有名的乐队柳拜创作的,普京都是他们的歌迷,他们还曾经在克林姆林宫旁的红场演出过。

这种“俄罗斯”式的军旅音乐,让我想起彼得堡宽阔的涅瓦河,想起莫斯科那飘扬的三色旗,想起摩尔曼斯克天空中瞬息万变的极光;在一个地方呆一段时间总会有些感情,不论那里的人给我留下什么印象,芬兰湾清澈的海水、冬日的皑皑白雪、高耸的白桦林,总是让我时常怀念。

在网上没有找到这首歌比较不错的中文翻译,于是自己翻译一份。

因为水平有限,翻译中有错误还请大家指出。

柳拜 «За тебя, Родина-мать» 歌词翻译