堆栈的理解
栈(Stack):按后进先出规则使用的内存区域,由 CPU 的栈指针(SP/PSP)自动管理,用于存储函数调用帧、局部变量、任务上下文。:是 main 函数 / 中断服务程序使用的栈,由编译器 / 启动文件分配,物理上独立于 FreeRTOS 的堆,是硬件栈指针(MSP)指向的区域。栈和堆是两种不同的内存管理逻辑,是同一块物理 RAM 的不同使用 / 管理规则,而非硬件层面割裂的两块内存。:是 F
栈和堆是两种不同的内存管理逻辑,是同一块物理 RAM 的不同使用 / 管理规则,而非硬件层面割裂的两块内存。
在FreeRTOS中,
栈(Stack):按后进先出规则使用的内存区域,由 CPU 的栈指针(SP/PSP)自动管理,用于存储函数调用帧、局部变量、任务上下文。(本身只是 “使用方式”,没有固定的物理内存区域 —— 它可以是编译器分配的系统栈,也可以是从堆中划出的一块内存)
堆(Heap):按自由申请 / 释放的规则使用的内存区域,由程序员(或 FreeRTOS 内核)手动管理,用于动态分配大块内存。(是系统预先划定的一块连续物理 RAM,供动态内存分配使用(FreeRTOS 的 heap_1~heap_5 就是对这块 RAM 的管理算法))
xTaskCreate()动态创建任务时,栈内存来自系统堆。
xTaskCreateStatic()静态创建任务时,栈内存不来自堆。
系统栈:是 main 函数 / 中断服务程序使用的栈,由编译器 / 启动文件分配,物理上独立于 FreeRTOS 的堆,是硬件栈指针(MSP)指向的区域。
任务栈:是 FreeRTOS 任务专属的栈,物理上可来自堆(动态)或静态内存,是任务栈指针(PSP)指向的区域。
二者都是 “栈(逻辑)”,但物理来源不同。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)