rtthread
文章平均质量分 83
期待小胖子
这个作者很懒,什么都没留下…
展开
-
基于rtthread了解C语言函数调用栈
因为在实际生产环境中与栈相关的问题也是比较多的,比如局部变量太多导致的栈溢出,或者踩内存问题引起的栈破坏等等。因此,了解了函数栈的原理,在遇到所谓的莫名其妙问题的时候就会有新的思路,本文部分使用了韦东山老师的文档。发现函数C太简单,它根本没有使用栈,函数C执行完,直接返回到LR(在rtthread打印的信息中),LR=0x0800076f,去掉bit0,就是:0x0800076e根据这个值,在反汇编文件中找到函数C的调用者,是函数B,在函数B的入口处,发现使用了8字节的栈,并且保存了R4,LR的值。...原创 2022-08-09 23:40:32 · 998 阅读 · 5 评论 -
基于rtthread的通用bootload设计
1.总体设计1.1概述固件升级,通常称为 OTA(Over the Air)升级或者 FOTA(Firmware Over-The-Air)升级,即固件通过空中下载进行升级的技术。bootloader 的升级模式常见有以下两种:(1):* bootloader 分区 + app1 分区 + app2 分区模式该模式下, bootloader 启动后,检查 app1 和 app2 分区,哪个固件版本最新就运行哪个分区的固件。当有新版本的升级固件时,固件下载程...原创 2021-12-16 17:22:53 · 1914 阅读 · 0 评论 -
rtthread-IO扩展PCA9539芯片
一、芯片介绍PCA9539是NXP推出用于扩展芯片引脚的芯片,当主芯片控制引脚不够时,可以通过添加PCA9539芯片来进行扩展,PCA9539具有中断输出和复位配置的远程 16 位 I2C 和 SMBus 低功耗 I/O 扩展器 寄存器。PCA9539由两个8位配置(输入或输出选择),输入端口,输出端口和极性反转(高电平有效或低电平有效操作)寄存器组成。上电时,I /O配置为输入。系统主机可以通过写入I /O配置位将I /O用作输入或输出。每个输入或输出的数据保存在相应的输入或输出寄存...原创 2021-06-25 20:34:58 · 2697 阅读 · 0 评论 -
rtthread之线程池
大多数网络服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服务器就将处于一个不停的创建线程和销毁线程的状态。这笔开销是不可忽略的,尤其是线程执行的时间非常非常短的情况。线程池就能解...原创 2021-04-15 18:19:36 · 1156 阅读 · 0 评论 -
环形缓冲区(ringbuffer)
环形缓冲区(ringbuffer)环形缓冲区是嵌入式系统中十分重要的一种数据结构,比如在串口处理中,串口中断接收数据直接往环形缓冲区丢数据,而应用可以从环形缓冲区取数据进行处理,这样数据在读取和写入的时候都可以在这个缓冲区里循环进行,程序员可以根据自己需要的数据大小来决定自己使用的缓冲区大小。环形缓冲区,顾名思义这个缓冲区是环形的,那么何谓环形这个意思也很好理解,就是用一个指针去访问该缓冲区的最后一个内存位置的的后一位置时回到环形缓冲区的起点。类似一个环一样在此之前,我们来回顾一下队列的基本概念原创 2021-03-29 21:24:35 · 16458 阅读 · 4 评论 -
rtthread中INIT_EXPORT与linux中__define_initcall对比解析
INIT_EXPORT的作用宏定义INIT_EXPORT(fn, level) 对于RTT内核的初始化很重要,它指示编译器在编译的时候,将一系列初始化函数的起始地址值按照一定的顺序放在一个section中。在内核初始化阶 段,rt_components_board_init()、rt_components_init() 将按顺序从该section中以函数指针的形式取出这些函数的起始地址,来依次完成相应的初始化。由于内核某些部分的初始化需要依赖于其他某些部分的初始 化的完成,因此这个顺序排列常常非常重要。原创 2021-03-29 20:50:27 · 1904 阅读 · 0 评论 -
rtthread移植实现uorb
uORB(Micro Object Request Broker,微对象请求代理器)是PX4/Pixhawk系统中非常重要且关键的一个模块,它肩负了整个系统的数据传输任务,所有的传感器数据、GPS、PPM信号等都要从芯片获取后通过uORB进行传输到各个模块进行计算处理。实际上uORB是一套跨「进程」 的IPC通讯模块。在Pixhawk中, 所有的功能被独立以进程模块为单位进行实现并工作。而进程间的数据交互就由为重要,必须要能够符合实时、有序的特点。 Pixhawk使用的是NuttX实时ARM系统,u原创 2020-08-25 01:19:02 · 1591 阅读 · 0 评论 -
rtthread之工作队列
中断处理分为上半部和下半部一般来说中断处理的上半部和下半部都是不允许出现睡眠和阻塞的。但是对于下半部,并不是一刀切,下半部的实现方式有软中断和tasklet(不允许睡眠和阻塞)以及工作队列(允许睡眠和阻塞)。上半部:一般中断的中断处理函数为上半部,要求做耗时少的动作,尽量迅速,一定不能休眠和阻塞。下半部:由于上半部只能执行耗时少的操作,所以耗时长的操作就放在下半部,两个的界限并不是很明显,取决于我们要将哪个操作放在上半部还是下半部。下面讨论一下工作队列的原...原创 2020-05-29 17:26:21 · 2301 阅读 · 0 评论 -
rtthread之小内存管理算法
计算机系统中,变量、中间数据一般存放在 RAM 中,只有在实际使用时才将它们从 RAM 调入到 CPU 中进行运算。一些数据需要的内存大小需要在程序运行过程中根据实际情况确定,这就要求系统具有对内存空间进行动态管理的能力,在用户需要一段内存空间时,向系统申请,系统选择一段合适的内存空间分配给用户,用户使用完毕后,再释放回系统,以便系统将该段内存空间回收再利用。 RT-...原创 2020-04-25 23:16:08 · 1491 阅读 · 0 评论