08 2021 档案
摘要:背景 由于导师看我没事(或许我很闲),便叫我开发一个人脸识别的系统,类似门禁之类的东西 项目目标 首先,利用红外检测(后面换成了温度传感器)检测是否有人,然后使用人脸识别,识别出对应的人,接下来就是,假设我们有一个数据库(有点无语这一块)可以访问这个人的行程,然后查看是否到过高风险地区,通过后,依次
阅读全文
摘要:轮询系统 是裸机系统中的一种,最简单的系统,只有一个外部的无限循环,顺序执行排列的任务,在任务执行层面不会出现分支,即:不会从一个任务切换到另一个任务 适用范围: 简单的处理(不需要分支和中断),例如:点亮LED灯,转动电机 前后台系统 属于裸机系统,允许出现中断,终端可以嵌套,但是没有分支 一定程
阅读全文
摘要:typedef的作用 重命名变量:typedef unsigned int Uint;//可以使用Uint代替unsigned int 定义新的数据类型 typedef struct Books{ char IBSN[20]; char author[30]; char name[40]; } Bo
阅读全文
摘要:引言 C语言没有直接地提供对错误的处理,但是在errno.h中提供了很多的错误代码 打印错误 perror()可以打印出对应的错误信息 strerror()会返回一个指针,指向当前errno值的文本表示形式 附: 对于文件流的错误需要使用stderr ex perror("error message
阅读全文
摘要:自动类型转换:低到高 int → unsigned int →long → unsigned long → long long → unsigned long long → float → double → long double ps:int自动转换成double并不需要经过中间的步骤,可以直接自
阅读全文
摘要:一般操作 使用头文件导入库函数和宏定义时,通常使用#include<stdio.h>或#include"my_library"来导入编译器自带的函数或自己编写的函数 只引用一次头文件 使用#ifndef来实现只引用一次的作用 ex #ifndef MY_LIBRARY #define MY_LIBR
阅读全文
摘要:引言 C预处理器(C Preperocessor cpp)主要处理代码中的预处理命令,在编译器之前执行 简单的文本替换,替换后会生成对应的.i文件 重要的预处理命令: 嵌入式开发常用 #include 导入库文件 #define 定义宏 定义常量,字符串,数据类型的别名 #undef 取消已定义的宏
阅读全文
摘要:输入和输出函数: scanf和printf 标准化的输入与输出(最常用) 使用占位符表示需要输入和输出的数据类型 getchar和putchar 用于输入输出单个字符 快速读入有奇效 gets和puts 用于读入和输出字符串(含空格) 附: scanf读入字符串的时候遇到空格就会停止读取,gets可
阅读全文
摘要:目标: 完成USOCII的移植 完成对现有硬件资源的访问 目前的状态: 设备上: 器材准备完全且能够正常工作 电脑环境已经配置好,可以进行工程的创建 自己: 有充足的时间 现在的问题: 关于硬件的资料太少 自己的知识储备不够 汇编,对硬件接口不熟悉,对stm32固件库的函数的不熟悉 可能的解决方案:
阅读全文
摘要:位域 位域,即将一个字节中的二进制位划分为不同的几个区域,并说明每个区域的位数 位域的声明 struct name{ //[]代表可选 int [name] : width; unsigned int [name] : width; signed int [name] : width; }; //对
阅读全文
摘要:字符串是一个以null结尾的字符数组 字符串的常见函数: strcpy(s1,s2) 复制s2到s1 strcat(s1,s2) 连接字符串s2到s1的末尾 strlen(s1) 获得s1的长度 strcmp(s1,s2) 如果s1==s2,返回0;如果s1<s2,返回小于;如果s1>s2,返回大于
阅读全文
摘要:&可获得变量的地址 使用指针前必须将指针初始化 无论指针指向什么类型的数据,对于的指针类型都是一个代表内存地址的十六进制数 NULL指针是一个定义在标准库中的值为零的常量 指针的递增并不是简单的加1,而是指向下一个元素的存储单元 指针数组可以用来实现广义表和二维数组 C语言不支持函数返回局部变量的地
阅读全文
摘要:引言 iar版本为8.32,j-link驱动版本为4.34,对应的是stm32 ARM cortex-m3 ,文末有本文的软件和工具,以及需要的文件的链接(免费) 第一坑:iar注册机不能注册iar9 解答:iar的注册机目前并不支持iar9,只支持iar8 注册成功后: 第二坑:j-link无法被
阅读全文
摘要:引言: 不会将每一个部分都详述,只关注于一些自己认为重要的或常错的,若有不足,还望指出 switch()细节:括号内必须是整型或枚举类型;遇到break才会跳出;case包含的必须是常量 continue:停止本次循环,重新开始下次迭代 函数的三要素:返回值类型,函数名称,形式参数列表 在调用函数时
阅读全文
摘要:类型为void*的指针代表对象的地址,而不是类型 如果需要使用另一个源文件中定义的变量,那么只需要在定义变量前加上extern关键字 ex: extern int x;//x在其他文件中定义 左值表达式:指向内存位置的表达式 出现在赋值号的左右 右值表达式:存储在内存中某些地址的数值 只能出现在赋值
阅读全文