共 33 篇文章 |
|
深入理解 STM32 双堆栈机制堆栈堆栈,「堆」和「栈」双堆栈机制使得内核/ISR 堆栈和线程应用堆栈分开管理,通过不同的堆栈指针寄存器完成切换,大大提高了系统的效率,在绝大部分的嵌入式实时操作系统中,都使用了双堆栈机制,如 ucos、FreeRTOS、RT-Thread 等。为了进一步加深理解,考虑以下四种情况的堆栈内存分布: 裸机单堆栈(主栈) 两个... 阅117 转0 评0 公众公开 20-07-17 19:16 |
rt-thread的内存管理分析rt-thread的内存管理分析。对于RT-Thread的内存管理方式,主要从小内存管理、slab、memheap以及内存池这四种内存管理策略上去分析对比,从而选择最佳的内存管理策略。rt-thread的小内存管理算法是一种比较简单的内存分配管理算法。rt-thread提供的小内存管理、slab、memheap、内存池这些内存管理策略,一方面针对不同大... 阅414 转1 评0 公众公开 20-07-15 18:15 |
rt-thread的线程调度与管理rt-thread的线程调度与管理。A线程的优先级要高于B线程的优先级,所以在A放弃CPU使用权后,已经就绪的最高优先级线程B就开始执行了。按照理解A线程是正在运行的线程,此时更高任务优先级的线程C就绪处于就绪状态了,所以系统的tick函数中判断已经有比线程A更高优先级的线程处于就绪状态,于是执行了rt_schedule()函数... 阅624 转1 评0 公众公开 20-07-07 23:02 |
深入理解 STM32 双堆栈机制堆栈堆栈,「堆」和「栈」双堆栈机制使得内核/ISR 堆栈和线程应用堆栈分开管理,通过不同的堆栈指针寄存器完成切换,大大提高了系统的效率,在绝大部分的嵌入式实时操作系统中,都使用了双堆栈机制,如 ucos、FreeRTOS、RT-Thread 等。为了进一步加深理解,考虑以下四种情况的堆栈内存分布: 裸机单堆栈(主栈) 两个... 阅666 转3 评0 公众公开 20-07-02 21:30 |
程序的内存分布+ROM和RAM.从低地址到高地址,可分为下面几段: 预留内存地址(操作系统维护的内存地址,不可访问) 程序代码区(只读,存代码和一些其他的东西);内存工作原理:内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我... 阅241 转0 评0 公众公开 20-07-01 09:46 |
关于 RTOS 的选择 (上)很多朋友和同事都问我,在实际中如何选择 RTOS。1.有些地方根本不需要 RTOS,可能系统设计者是爱好 RTOS 的人,:-),硬上了RTOS;撇开这些商业收费的 RTOS 不谈,就谈这些开源免费的 RTOS,成本主要是学习成本了。实时性,这个应该是 RTOS 的看家本领,我初学 rtos 的时候,好喜欢看牛人搞得 RTOS 对比表格。虽然 rtos 系... 阅17 转0 评0 公众公开 20-07-01 09:41 |
结构体内存对齐解析为什么要内存对齐。结构体各成员变量的内存空间的首地址必须是“对齐系数”和“变量实际长度”中较小者的整数倍。根据第一条规则:各成员的内存空间的首地址必须是对齐系数和变量本身大小较小者的整数倍,这里对齐系数是 4,因此变量 a 、数组 c 、变量 e 、变量 g 的首地址需要满足 1 的倍数,变量 b 的首地址需要满足 2 的... 阅18 转0 评0 公众公开 20-06-29 15:15 |
struct rt_object.static struct rt_object_information rt_object_container[RT_Object_Info_Unknown] =其所用是初始化对象的链表,将头尾指针都指向自身,实现的效果如下: 所以总体来说,rt_thread 中实现的容器里的内容就包含每一个内核对象,然后内核对象是由一个结构体实现的,结构体包含着内核对象的类型,初始化好的内核对象链表以及内... 阅93 转0 评0 公众公开 20-06-29 12:09 |
函数指针的意思就如名称称所示,它是一个指针,一个函数的指针,指向一个函数。比如下面我们就可以定义一个函数指针变量。上述指针变量的意思是定义了一个 pf 的函数指针变量,这个指针变量可以指向的是一个返回值为 int 的,函数两个 int 类型的参数的函数。其中 fna , fnb , fnc ,fnd 都是返回值和参数都为 void 的函数,上述定义的函数跳转... 阅41 转0 评0 公众公开 20-06-29 12:08 |
int main(void){ printf("%p, %p, %p, %p, %p, %p\n", &data.a, &data.b, &data.c, &data.d, &data.e, &data.f);struct STUDENT{ char name[10];int main(void){ printf("%p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p, %p\n", &data.name[0], &data.name[1], &data.name[2], &... 阅11 转0 评0 公众公开 20-06-24 22:41 |