嵌入式软件及操作系统学习
文章平均质量分 93
嵌入式软件及操作系统学习
棉花糖永远滴神
这个作者很懒,什么都没留下…
展开
-
实时操作系统Freertos开坑学习笔记:(八):信号量、事件标志组、任务通知机制
这一节的信息还是非常庞大的,同时也是非常重要的。就是说信号量就是停车位,信号量计数值大于0,说明有车位,=1有一个车位,=3有三个车位,等于0说明没有车位了。如果有一个车位被占了,那计数值就减一,空出来一个车位就加一。信号量可以比喻成一把钥匙,用于控制多个人对同一个资源的访问。每个人在想要使用这个资源之前,都必须先去拿这把钥匙。如果钥匙可用,那么这个人就可以使用资源;如果钥匙不可用,那么这个人就必须等待,直到有其他人归还钥匙。举一个实际的例子来说明信号量的概念。假设有一个公共厕所,只有一个坑位可供使用。原创 2023-09-05 21:53:54 · 1530 阅读 · 1 评论 -
实时操作系统Freertos开坑学习笔记:(五):任务调度和时间片调度
不多逼逼,直接上内容:这些内容基本上都是讲解源码,比较深,比较枯燥。原创 2023-09-03 15:45:18 · 1652 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(7)-联合体、内存对齐问题、位域、头文件
答:在C语言中,通常不建议将变量定义在头文件(.h文件)中,因为头文件中的内容会被多个源文件包含,如果在头文件中定义变量,那么这些源文件都会有这个变量的定义,这可能会导致编译错误或者运行时不可预料的结果。通常,头文件中只包含函数声明、宏定义、类型定义等信息,也就是说,头文件中应该只有声明,而不应该有定义。如果需要在多个源文件中共享变量,可以在一个源文件中定义这个变量,然后在其他源文件中使用extern关键字进行声明。这样,编译器就会将所有的引用都链接到同一个变量定义上,避免了定义重复和不一致的问题。原创 2023-07-25 22:33:24 · 839 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(4)-函数
形参是函数定义中的变量,用于接收函数调用时传递进来的参数。实参是函数调用时传递给函数的参数,可以是常量、变量、表达式或其他函数的返回值。在函数调用时,实参的值被复制到对应的形参中,函数内部使用的是形参的值。对形参的修改不会影响实参的值,因为形参只是实参的一个副本。函数可以接受多个参数,参数之间用逗号分隔。例如:u32 bound就是函数uart_init的形参,在主函数调用该函数时,使用:uart_init(115200),那么115200就是实参。在C语言中,递归是指函数调用自身的行为。递归函原创 2023-06-08 18:04:13 · 298 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(5)-指针
众所周知,指针是C语言的灵魂,那指针到底是什么?指针有什么应用?指针对于ARM架构和嵌入式开发有什么意义?C语言的指针是一个变量,它存储了一个内存地址。通过指针,可以直接访问或修改该内存地址中存储的数据。指针在C语言中非常重要,它可以用于动态分配内存、传递参数、访问硬件寄存器等。指针的基本操作包括指针声明、指针赋值、指针解引用、指针算术运算等。怎么理解呢?通常,我们认为变量是这样的:比如一个int val=1003,那么:在C语言中,int类型的变量a在内存中的存储结构通常是由四个字节(32位)的连续空原创 2023-06-12 22:18:24 · 787 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(三):任务的挂起与恢复、中断管理
本节包括这四个内容,主要掌握1和2,3属于选修内容,如果想深入理解可以学习。裸机编程里,中断是一个很重要的概念。这里我也不多说了,如图,由某些条件触发中断请求,然后CPU停止当前程序,进入中断处理程序执行,完毕后返回打断的程序处继续执行。如果出现了一个中断,同时又出现了一个更加重要的中断请求,即中断嵌套,那怎么办呢?采用中断优先级分组机制。原创 2023-08-29 21:56:31 · 1506 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(二):任务的创建、删除
这里,与动态的xTaskCreate函数不同的是,静态xTaskCreateStatic函数使用用户分配的任务控制块(pxTaskBuffer)和任务堆栈(puxStackBuffer),而不是动态分配内存。需要注意的是,任务控制块和任务堆栈的分配和管理由用户负责,因此在使用xTaskCreateStatic函数创建任务时,需要确保分配的内存足够,并在任务创建后,不再使用这些内存。此外,任务控制块和任务堆栈的生命周期必须覆盖整个任务的执行周期。原创 2023-08-28 21:22:26 · 1410 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(一):基础概念及代码移植
这篇博客记录我学习正点原子freertos操作系统的过程。FreeRTOS(Free Real-Time Operating System)是一个开源的实时操作系统(RTOS),专门用于嵌入式系统。它提供了一个小巧、高效、可移植的内核,适用于多种处理器架构和开发平台。FreeRTOS的特点和优势包括:①小巧高效:FreeRTOS的内核非常小巧,内存占用和代码尺寸都很小,适合于资源有限的嵌入式系统。它采用了事件驱动的设计,具有低延迟和高实时性。②。原创 2023-08-26 22:25:09 · 3282 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(6)-C语言的位操作、结构体与指针
C语言的结构体(struct)是一种用户自定义的数据类型,可以用来描述一组相关的数据项。结构体可以包含不同类型的数据项,如整型、浮点型、字符型、指针等。结构体中的每个数据项称为结构体成员,可以通过成员访问运算符(.)来访问结构体成员。结构体的定义通常放在函数外部,可以在函数内部进行实例化和使用。int age;在上面的示例中,我们定义了一个名为student的结构体,它包含了3个成员:name、age和score。其中,name是一个字符数组,age是一个整数,score是一个浮点数。原创 2023-07-23 23:25:29 · 649 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(四):临界段保护、列表与列表项
图里面说,临界区的代码是不能被打断的,它运行时不能被中断打断,也不能由于非阻塞任务延时而切换到其他任务去。比如说IIC进行通信时,软件模拟IIC会有一个4-8us的延时,说明通信时序非常重要,这里一旦被打断就会有影响。如果我写项目,任务一需要利用IIC通信测量MPU6050加速度值,任务二需要每0.5秒上报一次数据,那我的任务一会被任务二的调度而打断,即使事后仍能回到打断处,但是对于时序要求极高的IIC通信而言,肯定会造成出错。那应该怎样才能使临界区程序不被打断呢?原创 2023-08-30 19:51:48 · 1419 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(六):任务相关函数、任务延时函数
这里有两个概念:相对延时和绝对延时vTaskDelay()函数是相对延时函数。它会使当前任务进入阻塞状态,暂时释放处理器资源,并在指定的时间后重新被调度执行。该延时时间是相对于当前时间的相对时间。例如,如果调用vTaskDelay(1000)函数,任务将在当前时间的基础上延迟1000个时钟节拍。xTaskDelayUntil()函数是绝对延时函数。它会使当前任务进入阻塞状态,并在指定的绝对时间点后重新被调度执行。该延时时间是相对于系统运行的绝对时间的。原创 2023-09-04 10:06:55 · 1349 阅读 · 0 评论 -
实时操作系统Freertos开坑学习笔记:(七):队列
使用队列的主要流程:创建队列 ->写队列 -> 读队列。主要包括创建队列、写队列、读队列三个部分。原创 2023-09-04 13:33:36 · 1148 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(1)-C语言的本质
学习B站韦东山的ARM架构与C语言的学习笔记。原创 2023-06-03 21:28:34 · 1060 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(2)-全局变量,堆和栈
对局部变量而言,初始化是分配指定字节的数据空间和指定字节的地址空间,局部变量是保存在RAM中的,而对于全局变量,全局变量在程序的任何地方都可以访问,因此它们通常会存储在RAM中。对于ARM架构的cortex-m3内核,栈是向下生长的满栈,也就是说栈指针sp最初指向的是用户设置的高地址处,比如0x20001000处,由于向下增长,栈顶指针指向的地址是最新的数据所在的地址,而栈底指针指向的地址是最早的数据所在的地址。在栈中,数据的添加和移除只能发生在栈顶,因此最后添加到栈中的数据将首先被移除。原创 2023-06-08 12:16:15 · 995 阅读 · 0 评论 -
ARM架构与C语言(韦东山)学习笔记(3)-一些关于局部变量、全局变量、栈和堆的疑问
这种方式定义的pi是一个常量,它的值在编译期间就已经确定了,因此在程序执行期间是不能修改它的值的。静态变量的作用域为整个文件,可以在文件中的任何函数中使用,并且在程序运行期间只会被初始化一次,因此可以用来存储一些需要保持状态的数据。while(1)的意思是当括号内的条件为真时,就一直执行循环内的语句,因为1是真值,所以这个循环会一直执行下去,直到程序被强制终止。此外,静态局部变量的初始化只会在第一次函数调用时执行,以后的调用不会再次执行初始化操作,因此可以用来存储一些需要保持状态的数据。原创 2023-06-08 17:04:01 · 479 阅读 · 0 评论