Lv_fs的探究

1 lv_fs 的作用

在 lv_conf 中可以看到有个宏定义是专门用来开启文件系统的,不过根据说明上是专门用于图片显示的。

2 效果

在使用图片显示功能时,有两种方式来获取图片的源数据。第一种是,将图片转换成C数组固定格式的文件,将图片数据预先编译好,使用的时候直接通过图片结构体的指针来调用;第二种是将图片转化为bin文件,先将其写入romflash,使用的时候再读入ramflash,再通过文件名调用。

3 实现过程

首先是枚举了文件系统的13种状态。

然后定义了文件系统驱动的结构体,比如第一个char letter,是用来定义盘符的,同时还定义了很多功能函数的结构体,如最基本的openclosereadwrite,所以这个结构体配合后面的文件系统初始化函数就类似于一个挂载的作用。

阅读更多
Lv_ll的探究

1 lv_ll 的作用

ll 为 linked list 的简写,即链表。LittlevGL 所创建的此模块主要是服务于需要使用链表功能的对象,如 group、obj、anim、chart 等。

2 效果

lv_ll 最形象的效果体现的 lv_group 上,在前面也探究过,群对象可以使用特定功能的两个按钮来实现“上一个”、“下一个”的切换,使用到了双链表中的“前驱、“后继”,具体效果体现这里不再赘述。

阅读更多
Python3基础知识11

1 错误和异常

Python有两种错误很容易辨认:语法错误和异常。

1.1 语法错误

Python 的语法错误或者称之为解析错,是初学者经常碰到的,如下实例

1
2
3
4
5
>>> while True print('Hello world')
File "<stdin>", line 1, in ?
while True print('Hello world')
^
SyntaxError: invalid syntax

这个例子中,函数 print() 被检查到有错误,是它前面缺少了一个冒号(:)。

语法分析器指出了出错的一行,并且在最先找到的错误的位置标记了一个小小的箭头。

阅读更多
Python3基础知识10

1 File 的使用

1.1 读和写文件

open() 将会返回一个 file 对象,基本语法格式如下:

1
open(filename, mode)

  • filename:filename 变量是一个包含了你要访问的文件名称的字符串值。
  • mode:mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。
模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
阅读更多
Python3基础知识9

1 Python3 输入和输出

1.1 输出格式美化

Python两种输出值的方式: 表达式语句和 print() 函数。

第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。

如果你希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。

如果你希望将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。

  • str(): 函数返回一个用户易读的表达形式。
  • repr(): 产生一个解释器易读的表达形式。
阅读更多
Python3基础知识8

1 Python3 模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
下面是一个使用 python 标准库中模块的例子。

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# 此文件名: test_module.py
import sys

print('命令行参数如下:')
for i in sys.argv:
print(i)

print('\n\nPython 路径为:', sys.path, '\n')

带参执行如下:

阅读更多
Python3基础知识7

1 函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
阅读更多
Python3基础知识6

1 时间和日期

Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 例如:

1
2
3
#!/usr/bin/env python3
ticks = time.time()
print ("当前时间戳为:", ticks)

输出结果:

1
当前时间戳为: 1525748174.8730757

目前,UNIX和Windows只支持到2038年。

阅读更多
Python3基础知识5

1 循环语句

Python中的循环语句有for和while
同样需要注意冒号和缩进。另外,在Python中没有do..while循环。

2 while 循环

比如使用了 while 来计算 1 到 1000 的总和:

1
2
3
4
5
6
7
8
#!/usr/bin/env python3
n = 1000
sum = 0
counter = 1
while counter <= n:
sum = sum + counter
counter += 1
print("1 到 %d 之和为: %d" % (n,sum))

输出结果:

1
1 1000 之和为: 500500

阅读更多
Python3基础知识4

1 斐波那契数列

在 Python3 中赋值符号两侧可以同时对应的多个变量赋值,例如

1
2
3
4
5
6
#!/usr/bin/python3
a,b,c,d = 1,2,3,4
print("a:",a)
print("b:",b)
print("c:",c)
print("d:",d)

输出如下:

1
2
3
4
a: 1
b: 2
c: 3
d: 4

阅读更多