
嵌入式基础
文章平均质量分 58
C语言、Linux、Makefile等基础知识
tilblackout
score til you black out.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
GPIO模式详解:推挽/开漏/浮空/上拉/下拉/施密特(迟滞)输入
一个GPIO引脚主要有两个缓冲区,即输入和输出。输入和输出由使能引脚ENABLE控制:每个输入/输出缓冲区都有一个PMOS和NMOS晶体管以及一个非门。原创 2023-11-23 07:00:00 · 10047 阅读 · 1 评论 -
时序图基础知识
这篇文章简单地介绍了一下时序图的基础知识,但如果我们现在打开一个芯片手册中的时序图,我们会发现还是读不懂,因为实际比这些复杂多了,我们就需要理解手册中每一个时序参数的含义,然后再来分析时序图。原创 2023-07-02 23:14:24 · 8162 阅读 · 0 评论 -
C语言结构体指定初始化
很多时候我们并不会使用到结构体中每一个成员,只想初始化其中某几个成员,这时候可以使用结构体的指定初始化。struct student { char *name; int num; int age; char group; float score;} ;(1)常规情况下:所有变量都要初始化struct student stu1 ={"Tom",12,18,"A",136.5};(2)指定初始化:在变量名前加一个“.”,每行用逗号隔开struct st原创 2022-03-11 10:52:18 · 1572 阅读 · 0 评论 -
C语言 #和##的使用
Linux源代码中偶尔会遇到#号,虽然很少用到,但还是做个笔记:①#:对它所引用的宏变量左右各加上一个双引号前提: printf("123""456"); //printf是可以这样使用的,输出123456例: #define test(EXP) #EXP printf("123"test(45)"6");//等价于printf("123""45""6");②##:在带参数的宏定义中将两个子串(token)联接起来形成一个新子串(非字符串)。子串:编译器能够识原创 2022-03-11 10:47:33 · 1131 阅读 · 0 评论 -
μC/OS-II中最高优先级任务的判定
假设最多支持64个任务,先来看看判断最高优先级任务所用到的相关变量:uint8 OSRdyGrp:将64个任务分成了8组,该变量表示哪一组有就绪任务uint8 OSRdyTbl[8]:即上面的8组任务,对应每一组有8个任务,为1表示该任务就绪uint8 OSUnMapTbl[256]:μC/OS-II中优先级数字越低表示优先级越高。这里就是要获得最低位开始,第一位为1所在的位数。每次都要一位一位的判断很麻烦,干脆将结果做成一个表格,通过索引来获取寻找最高优先级任务相关代码:y = OSU原创 2022-04-28 11:38:30 · 712 阅读 · 0 评论 -
嵌入式中volatile的使用
volatile关键字的意思为易变的,提醒编译器从变量地址中读取数据,而不是有时优化为暂时使用寄存器中的值。如果变量由别的程序或函数更新,特别是在中断中修改的话,编译器很可能会优化变量,将出现不一致的现象。比如说在中断中修改一个变量的值,但中断什么时候触发编译器并不知道,那编译器就会以为那段代码不会执行,从而优化掉。那volatile就告诉编译器这个变量是易变的,不要优化它。指令重排序的概念:static int num = 0;线程1: num = 2; ready = t原创 2021-12-10 23:04:20 · 330 阅读 · 0 评论 -
C语言代码规范
(1)switch caseswich和case标签应该对齐处于同一列switch (character) {case 'a': ... break;default: break;}(2)一行的长度限制在80列超过要换行,且进行合适的缩进,一般一个缩进即可。(3)括号代码中用到大括号{}的地方,应该把起始大括号“{”放到行尾,把结束大括号“}”放到行首。如if、switch、for、do、while。注意:函数的起始大括号要放置到下一行的开头只有一个单独的语句时候可不加大括原创 2021-03-25 11:52:22 · 1014 阅读 · 0 评论 -
Makefile基础、常用函数及通用Makefile
1.基础程序的编译过程预处理: ①把包含的头文件插入源文件中②展开宏定义③根据条件编译选择要使用的代码④最后把代码输出到一个.i格式的文件编译:把C/C++代码(.i文件)翻译成.s汇编代码汇编:把.s文件翻译成.o格式的机器代码链接:把.o文件、库文件等链接起来,生成可执行文件。规则:目标:依赖1 依赖2 ...<TAB> 命令命令执行的条件:依赖文件比目标文件的时间新 或 没有目标文件隐式规则常见的用法:foo:foo.o bar.o gcc -o原创 2021-03-24 21:04:55 · 535 阅读 · 0 评论 -
Makefile中.PHONY伪目标的作用(完整)
第一种情况:避免命令与目录下的文件名重复实际上这个情况很少发生,但网上大部分博客也仅介绍了这一种情况。这里简单介绍一下:Makefile如下clean: rm -f *.o temp如果当前目录下没有名为“clean”的文件,则rm指令会被执行。如果有的话,由于clean没有依赖文件,所以目标被认为是最新的而不去执行rm指令。在Makefile中加如下代码可以防止这种情况发送.PHONY : clean第二种情况:make的并行和递归执行过程中先看一个例子SUBDIRS = foo原创 2021-03-13 23:31:46 · 8286 阅读 · 3 评论 -
lds链接脚本基础与例子分析
1.基础段.data段包含初始值非0的全局变量(不管静态还是非静态).rodata段包含被const修饰的初始值非0的全局变量.bss段包含初始值为0或未初始的全局变量(不管有没有const修饰,也不管是静态还是非静态)局部变量保存在栈中注:有的编译器会将没有初始化的变量保存在COMMON段,等到链接时再将其放入到bss段。.text段保存代码链接地址和加载地址链接地址是程序实际运行的地址(内存)加载地址指的是程序编译后的存放地址(Flash)链接脚本格式链接脚本由一系列命令原创 2021-03-24 17:41:56 · 1669 阅读 · 0 评论 -
GCC编译选项
1 编译优化(1)-O0:不进行任何优化,若要debug,则建议不优化(2)-O1:对代码的分支,常量以及表达式等进行优化(3)-O2:尝试更多的寄存器级的优化以及指令级的优化(4)-O3:在O2的基础上进行更多的优化,如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化(5)-Os:对代码大小优化。 不便于debug,且依赖内存操作顺序的程序需要做相关处理才能确保程序的正确性。优化代码有可能带来的问题1.调试问题:任何级别的优化都将带来代码结构的改变。例如:对分支的合并和消除,对公用子原创 2021-03-24 17:07:59 · 542 阅读 · 0 评论 -
C语言变量命名规则
开头为数据类型,其余部分用变量的英文意思表示,注意要大写。 变量类型 前缀 实例 Unsigned Int ui uiLen Int i iVal Unsigned Char uc ucError Char c原创 2021-03-23 22:34:39 · 971 阅读 · 0 评论