06 2021 档案

摘要:当运行的程序在被停止住时,我们可以让其自动运行一些别的命令 用法:commands break_list例如: (gdb) commands 1 Type commands for when breakpoint 1 is hit, one per line. End with a line say 阅读全文
posted @ 2021-06-30 16:53 流水灯 阅读(303) 评论(0) 推荐(0) 编辑
摘要:break if 用法:break [break-args] if (condition)例如: break main if argc > 1 break 180 if (string == NULL && i < 0) break test.c:34 if (x & y) == 1 break m 阅读全文
posted @ 2021-06-30 15:31 流水灯 阅读(720) 评论(0) 推荐(0) 编辑
摘要:编译程序, gcc 需要加上 -g,才能用 gdb 调试程序,然后把优化等级设为 -O0 在 (gdb) 状态下直接回车,执行上一次命令 (gdb) help ;查看帮助文档 (gdb) shell 命令 ;可以在 gdb 调试环境下执行 shell 命令 程序执行控制 $ gdb ;进入 gdb 阅读全文
posted @ 2021-06-30 15:21 流水灯 阅读(335) 评论(0) 推荐(0) 编辑
摘要:简而言之: CMSIS 定义了一套 API,应用层代码调用这套API。微控制器厂商完成 API 的实现。 CMSIS 项目仍在不断更新,它开始是为了 cortex-M 微控制器的设备驱动库建立一致性,现在已经成为了 CMSIS-Core,其他的 CMSISI 项目也已经启动: CMSIS-Core( 阅读全文
posted @ 2021-06-28 15:10 流水灯 阅读(1655) 评论(0) 推荐(0) 编辑
摘要:基本知识 证书生成网站:https://csr.chinassl.net/index.html 证书会包含一个服务器的域名,或者包含多个域名( 多域名证书,SAN certificater == SubjectAltName Certificater) 自签名证书:正常情况是把 “ 证书请求文件 ” 阅读全文
posted @ 2021-06-26 15:20 流水灯 阅读(585) 评论(0) 推荐(0) 编辑
摘要:subject alt name: 对于证书持有者,一般使用 Subject 项标记,并使用 subjectAltName 扩展项提供更详细的持有者身份信息。 subjectAltName 全称为 Subject Alternative Name,缩写为 SAN。它可以包括一个或者多个的电子邮件地址 阅读全文
posted @ 2021-06-24 17:44 流水灯 阅读(941) 评论(0) 推荐(0) 编辑
摘要:源文件到可执行文件流程 编译:.c 文件变成 .s 汇编文件 汇编:.s 文件变成 .o 可重定位的目标文件(elf格式文件) 链接:一个或多个.o 文件变成一个可执行文件 ELF 文件和 BIN 文件的区别 BIN文件是直接的二进制文件,内部没有地址标记。bin文件内部数据按照代码段或者数据段的物 阅读全文
posted @ 2021-06-18 10:05 流水灯 阅读(3029) 评论(0) 推荐(0) 编辑
摘要:objcopy用于将object的部分或全部内容拷贝到另一个object,从而可以实现格式的变换。 objcopy可用于将文件转换成S-record格式或者raw二进制格式。 例如, xxxx-elf-objcopy –O srec test.o test.s19 则将test.o转换成s-reco 阅读全文
posted @ 2021-06-17 11:38 流水灯 阅读(926) 评论(0) 推荐(0) 编辑
摘要:使用默认链接文件生成可执行文件: cc = gcc prom = hello DIR= ($shell pwd) inc_dir = $(DIR)/inc src_dir = $(DIR)/src obj = $(pathsubst $(src_dir)/%.c, $(src_dir)/%.o, $ 阅读全文
posted @ 2021-06-17 10:59 流水灯 阅读(121) 评论(0) 推荐(0) 编辑
摘要:fflush()的作用是用来清空缓冲区,fflush(stdin)清空标准输入缓冲区,把输入缓冲区里的东西丢弃; fflush(stdout)清空标准输出缓冲区,把输出缓冲区里的东西强制打印到标准输出设备上。 fflush(stdin)不太常用,在有些编译器中是错误的用法,可以用以下方法替代:whi 阅读全文
posted @ 2021-06-17 09:41 流水灯 阅读(776) 评论(0) 推荐(0) 编辑
摘要:这个问题与虚拟地址空间的分配规则有关,每一个可执行C程序,从低地址到高地址依次是:text,data,bss,堆,栈,环境参数变量;其中堆和栈之间有很大的地址空间空闲着,在需要分配空间的时候,堆向上涨,栈往下涨。 这样设计可以使得堆和栈能够充分利用空闲的地址空间。如果栈向上涨的话,我们就必须得指定栈 阅读全文
posted @ 2021-06-16 18:07 流水灯 阅读(2770) 评论(0) 推荐(0) 编辑
摘要:例子1 我们都知道数组下表是从0开始的,假如我们想从1开始,可以这么干: 定义一个指针,指向a[-1]这个位置 #include <stdio.h> void main() { int a[] = {1,3,4}; int *p = &a[-1]; int i =0; for( i = 1; i < 阅读全文
posted @ 2021-06-15 18:02 流水灯 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:可变参数函数:函数的参数个数是可变的 ANSI C,这些宏的定义位于stdarg.h中: typedef char *va_list; va_start #define va_start(list,param1) ( list = (va_list)&param1+ sizeof(param1) ) 阅读全文
posted @ 2021-06-15 15:23 流水灯 阅读(212) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2021-06-13 17:49 流水灯 阅读(0) 评论(0) 推荐(0) 编辑
摘要:链接脚本官方文档: https://sourceware.org/binutils/docs-2.39/ld.html 链接脚本实例:(STM32F407VG,RT-Thread Studio生成的工程所含) /* * linker script for STM32F407ZG with GNU l 阅读全文
posted @ 2021-06-12 21:41 流水灯 阅读(20670) 评论(0) 推荐(8) 编辑
摘要:背景 有时我们的程序会定义一些暂时使用不上的功能和函数,虽然我们不使用这些功能和函数,但它们往往会浪费我们的ROM和RAM的空间。这在使用静态库时,体现的更为严重。有时,我们只使用了静态库仅有的几个功能,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加。 参数详解 阅读全文
posted @ 2021-06-12 21:14 流水灯 阅读(603) 评论(0) 推荐(0) 编辑
摘要:汇编代码语法官方文档: https://sourceware.org/binutils/docs-2.39/as.html 什么是汇编伪指令 1、没有对应机器指令的汇编指令,主要用于协助汇编程序进行汇编。 2、在计算机中直接运行的程序所对应的语言叫机器语言(指令),如果直接按二进制表示出来就是一系列 阅读全文
posted @ 2021-06-12 20:40 流水灯 阅读(1207) 评论(0) 推荐(1) 编辑
摘要:startup.s 功能 startup.s 文件定义了向量表,包含栈初始值和各个中断服务函数指针。 芯片一上电,自动设置SP,PC,然后执行复位中断: 设置栈顶寄存器的值 多余,芯片一上电自动设置了 data段的数据从 flash 拷贝到 SRAM bss段位于SRAM,初始化为0 执行 Syst 阅读全文
posted @ 2021-06-10 14:20 流水灯 阅读(1660) 评论(0) 推荐(0) 编辑
摘要:typedef int (*init_fn_t)(void);#define RT_USED __attribute__((used))#define INIT_EXPORT(fn, level) RT_USED const init_fn_t __rt_init_##fn SECTION(".rt 阅读全文
posted @ 2021-06-08 17:54 流水灯 阅读(1800) 评论(0) 推荐(0) 编辑
摘要:startup.s 功能 不同的开发环境(IAR、KEIL、GCC编译器),startup.s的内容多少有些差别,但是功能基本如下: 设置向量表,包含MSP初值,各中断函数指针 芯片一上电,自动设置SP,PC,然后执行复位中断: 执行 SystemInit,初始化时钟,设置SCB->VTOR的值为向 阅读全文
posted @ 2021-06-06 22:55 流水灯 阅读(1240) 评论(0) 推荐(1) 编辑
摘要:Cortex-M3 系列处理器是基于 ARMv7-M 架构的处理器,应用非常广泛,为了能够深入的分析在此平台上跑 RTOS 的各种细节,所以有必要写一篇关于 CM3 处理器的结构相关的文章(CM4 类似),在 OS 调度初始化、系统调用、进程调度等方面的细节均是和具体处理器息息相关,所以先让我们来看 阅读全文
posted @ 2021-06-06 21:58 流水灯 阅读(2981) 评论(0) 推荐(1) 编辑
摘要:FreeRTOS 第一次启动任务切换前,需要调用函数 vPortStartFirstTask,初始化 MSP,然后触发 SVC 的中断函数 vPortSVCHandler,中断函数执行出栈后就跳转到第一个任务的入口函数。 之后任务切换通过中断函数 xPortPendSVHandler,此函数会执行入 阅读全文
posted @ 2021-06-06 15:28 流水灯 阅读(2535) 评论(0) 推荐(0) 编辑
摘要:知识点: MSP:主堆栈指针,系统复位后,默认使用MSP指针,MSP指针用于操作内核以及处理异常和中断(异常是中断的一种,中断服务程序默认强制使用MSP指针,这是硬件自动设置的) 不使用OS,非中断函数和中断函数都使用MSP PSP:进程堆栈指针,任务(进程)使用PSP指针,在vPortSVCHan 阅读全文
posted @ 2021-06-06 14:40 流水灯 阅读(1325) 评论(0) 推荐(0) 编辑
摘要:官方文档 https://www.gnu.org/software/make/manual/make.html 目标 - 依赖文件 - 命令 目标(文件):依赖文件 命令(命令前是一个TAB键) 1、make执行的格式为:make 目标,如果不指定目标,会执行Makefile中第一个出现的没有匹配符 阅读全文
posted @ 2021-06-03 17:54 流水灯 阅读(100) 评论(0) 推荐(0) 编辑
摘要:override指示符 通常在执行 make 时,如果通过命令行定义了一个变量,那么它将替代在 Makefile中出现的同名变量的定义。就是说,对于一个在 Makefile 中使用常规方式(使用“=”、“:=”或者“define”)定义的变量,我们可以在执行 make 时通过命令行方式重新指定这个变 阅读全文
posted @ 2021-06-02 17:41 流水灯 阅读(234) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示