<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>heap no FreeRTOS - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/heap-no-freertos/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Tue, 06 Jan 2026 23:18:59 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mcu.tec.br/wp-content/uploads/2025/02/Robo-para-o-site-MCU.tec_.br-512x512-1-150x150.png</url>
	<title>heap no FreeRTOS - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Dimensionamento de Pilha (Stack) e Heap no FreeRTOS</title>
		<link>https://mcu.tec.br/rtos/dimensionamento-de-pilha-stack-e-heap-no-freertos/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dimensionamento-de-pilha-stack-e-heap-no-freertos</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Fri, 16 Jan 2026 19:52:45 +0000</pubDate>
				<category><![CDATA[RTOS]]></category>
		<category><![CDATA[ARM Cortex-M RTOS]]></category>
		<category><![CDATA[dimensionamento de memória RTOS]]></category>
		<category><![CDATA[freertos]]></category>
		<category><![CDATA[gerenciamento de memória embarcado]]></category>
		<category><![CDATA[heap no FreeRTOS]]></category>
		<category><![CDATA[heap_4 FreeRTOS]]></category>
		<category><![CDATA[heap_5 FreeRTOS]]></category>
		<category><![CDATA[stack no FreeRTOS]]></category>
		<category><![CDATA[stack overflow FreeRTOS]]></category>
		<category><![CDATA[TCB FreeRTOS]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=1021</guid>

					<description><![CDATA[<p>Aprenda como dimensionar corretamente stack e heap no FreeRTOS com explicações detalhadas sobre TCB, heap e stack, cálculos práticos, fórmulas, exemplos em C e boas práticas profissionais. Este guia técnico aborda erros comuns, sintomas em campo e estratégias robustas para evitar falhas, fragmentação de memória e resets inesperados em sistemas embarcados baseados em RTOS, especialmente em microcontroladores ARM Cortex-M.</p>
<p>The post <a href="https://mcu.tec.br/rtos/dimensionamento-de-pilha-stack-e-heap-no-freertos/">Dimensionamento de Pilha (Stack) e Heap no FreeRTOS</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="root-eb-toc-g038z wp-block-essential-blocks-table-of-contents"><div class="eb-parent-wrapper eb-parent-eb-toc-g038z "><div class="eb-toc-container eb-toc-g038z  eb-toc-is-not-sticky eb-toc-not-collapsible eb-toc-initially-not-collapsed eb-toc-scrollToTop style-1 list-style-none" data-scroll-top="false" data-scroll-top-icon="fas fa-angle-up" data-collapsible="false" data-sticky-hide-mobile="false" data-sticky="false" data-scroll-target="scroll_to_toc" data-copy-link="false" data-editor-type="" data-hide-desktop="false" data-hide-tab="false" data-hide-mobile="false" data-itemcollapsed="false" data-highlight-scroll="false"><div class="eb-toc-header"><h2 class="eb-toc-title">Table of Contents</h2></div><div class="eb-toc-wrapper " data-headers="[{&quot;level&quot;:3,&quot;content&quot;:&quot;Por que dimensionar corretamente Stack e Heap em sistemas com FreeRTOS&quot;,&quot;text&quot;:&quot;Por que dimensionar corretamente Stack e Heap em sistemas com FreeRTOS&quot;,&quot;link&quot;:&quot;por-que-dimensionar-corretamente-stack-e-heap-em-sistemas-com-freertos&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Modelo de Mem\u00f3ria em Sistemas com FreeRTOS: CTB, Heap e Stack&quot;,&quot;text&quot;:&quot;Modelo de Mem\u00f3ria em Sistemas com FreeRTOS: CTB, Heap e Stack&quot;,&quot;link&quot;:&quot;eb-table-content-1&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;2.1 CTB (Control Block \/ TCB \u2013 Task Control Block)&quot;,&quot;text&quot;:&quot;2.1 CTB (Control Block \/ TCB \u2013 Task Control Block)&quot;,&quot;link&quot;:&quot;21-ctb-control-block-tcb-task-control-block&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;2.2 Heap no FreeRTOS&quot;,&quot;text&quot;:&quot;2.2 Heap no FreeRTOS&quot;,&quot;link&quot;:&quot;22-heap-no-freertos&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;2.3 Stack no FreeRTOS&quot;,&quot;text&quot;:&quot;2.3 Stack no FreeRTOS&quot;,&quot;link&quot;:&quot;23-stack-no-freertos&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;2.4 Rela\u00e7\u00e3o entre Heap, TCB e Stack&quot;,&quot;text&quot;:&quot;2.4 Rela\u00e7\u00e3o entre Heap, TCB e Stack&quot;,&quot;link&quot;:&quot;eb-table-content-5&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Stack no FreeRTOS: Funcionamento Interno, Cortex-M e Impacto das Interrup\u00e7\u00f5es&quot;,&quot;text&quot;:&quot;Stack no FreeRTOS: Funcionamento Interno, Cortex-M e Impacto das Interrup\u00e7\u00f5es&quot;,&quot;link&quot;:&quot;eb-table-content-6&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.1 O que realmente vai para a stack de uma task&quot;,&quot;text&quot;:&quot;3.1 O que realmente vai para a stack de uma task&quot;,&quot;link&quot;:&quot;31-o-que-realmente-vai-para-a-stack-de-uma-task&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.2 Empilhamento autom\u00e1tico no Cortex-M (hardware stacking)&quot;,&quot;text&quot;:&quot;3.2 Empilhamento autom\u00e1tico no Cortex-M (hardware stacking)&quot;,&quot;link&quot;:&quot;eb-table-content-8&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.3 Stack da Task vs Stack da Interrup\u00e7\u00e3o&quot;,&quot;text&quot;:&quot;3.3 Stack da Task vs Stack da Interrup\u00e7\u00e3o&quot;,&quot;link&quot;:&quot;eb-table-content-9&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.4 F\u00f3rmula pr\u00e1tica para estimativa inicial de stack&quot;,&quot;text&quot;:&quot;3.4 F\u00f3rmula pr\u00e1tica para estimativa inicial de stack&quot;,&quot;link&quot;:&quot;eb-table-content-10&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.5 Erros cl\u00e1ssicos de dimensionamento de stack&quot;,&quot;text&quot;:&quot;3.5 Erros cl\u00e1ssicos de dimensionamento de stack&quot;,&quot;link&quot;:&quot;eb-table-content-11&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;3.6 Detec\u00e7\u00e3o e medi\u00e7\u00e3o de stack no FreeRTOS&quot;,&quot;text&quot;:&quot;3.6 Detec\u00e7\u00e3o e medi\u00e7\u00e3o de stack no FreeRTOS&quot;,&quot;link&quot;:&quot;eb-table-content-12&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Heap no FreeRTOS: Modelos, Fragmenta\u00e7\u00e3o e Impacto no Sistema&quot;,&quot;text&quot;:&quot;Heap no FreeRTOS: Modelos, Fragmenta\u00e7\u00e3o e Impacto no Sistema&quot;,&quot;link&quot;:&quot;eb-table-content-13&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.1 O que realmente consome heap no FreeRTOS&quot;,&quot;text&quot;:&quot;4.1 O que realmente consome heap no FreeRTOS&quot;,&quot;link&quot;:&quot;41-o-que-realmente-consome-heap-no-freertos&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.2 Os cinco modelos de heap do FreeRTOS&quot;,&quot;text&quot;:&quot;4.2 Os cinco modelos de heap do FreeRTOS&quot;,&quot;link&quot;:&quot;42-os-cinco-modelos-de-heap-do-freertos&quot;},{&quot;level&quot;:4,&quot;content&quot;:&quot;heap_1&quot;,&quot;text&quot;:&quot;heap_1&quot;,&quot;link&quot;:&quot;heap_1&quot;},{&quot;level&quot;:4,&quot;content&quot;:&quot;heap_2&quot;,&quot;text&quot;:&quot;heap_2&quot;,&quot;link&quot;:&quot;heap_2&quot;},{&quot;level&quot;:4,&quot;content&quot;:&quot;heap_3&quot;,&quot;text&quot;:&quot;heap_3&quot;,&quot;link&quot;:&quot;heap_3&quot;},{&quot;level&quot;:4,&quot;content&quot;:&quot;heap_4 (mais usado na pr\u00e1tica)&quot;,&quot;text&quot;:&quot;heap_4 (mais usado na pr\u00e1tica)&quot;,&quot;link&quot;:&quot;eb-table-content-19&quot;},{&quot;level&quot;:4,&quot;content&quot;:&quot;heap_5&quot;,&quot;text&quot;:&quot;heap_5&quot;,&quot;link&quot;:&quot;heap_5&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.3 Estrutura interna do heap_4&quot;,&quot;text&quot;:&quot;4.3 Estrutura interna do heap_4&quot;,&quot;link&quot;:&quot;43-estrutura-interna-do-heap_4&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.4 C\u00e1lculo do heap necess\u00e1rio (estimativa inicial)&quot;,&quot;text&quot;:&quot;4.4 C\u00e1lculo do heap necess\u00e1rio (estimativa inicial)&quot;,&quot;link&quot;:&quot;eb-table-content-22&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.5 Fragmenta\u00e7\u00e3o: o inimigo invis\u00edvel&quot;,&quot;text&quot;:&quot;4.5 Fragmenta\u00e7\u00e3o: o inimigo invis\u00edvel&quot;,&quot;link&quot;:&quot;eb-table-content-23&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;4.6 Heap est\u00e1tico vs heap din\u00e2mico&quot;,&quot;text&quot;:&quot;4.6 Heap est\u00e1tico vs heap din\u00e2mico&quot;,&quot;link&quot;:&quot;eb-table-content-24&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Estrat\u00e9gia Profissional de Dimensionamento: M\u00e9todo Passo a Passo&quot;,&quot;text&quot;:&quot;Estrat\u00e9gia Profissional de Dimensionamento: M\u00e9todo Passo a Passo&quot;,&quot;link&quot;:&quot;eb-table-content-25&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.1 Passo 1 \u2014 Mapear todas as entidades que consomem mem\u00f3ria&quot;,&quot;text&quot;:&quot;5.1 Passo 1 \u2014 Mapear todas as entidades que consomem mem\u00f3ria&quot;,&quot;link&quot;:&quot;eb-table-content-26&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.2 Passo 2 \u2014 Dimensionar stack individualmente (n\u00e3o por m\u00e9dia)&quot;,&quot;text&quot;:&quot;5.2 Passo 2 \u2014 Dimensionar stack individualmente (n\u00e3o por m\u00e9dia)&quot;,&quot;link&quot;:&quot;eb-table-content-27&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.3 Passo 3 \u2014 Converter tudo para palavras (n\u00e3o bytes)&quot;,&quot;text&quot;:&quot;5.3 Passo 3 \u2014 Converter tudo para palavras (n\u00e3o bytes)&quot;,&quot;link&quot;:&quot;eb-table-content-28&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.4 Passo 4 \u2014 Calcular o heap total&quot;,&quot;text&quot;:&quot;5.4 Passo 4 \u2014 Calcular o heap total&quot;,&quot;link&quot;:&quot;54-passo-4-calcular-o-heap-total&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.5 Passo 5 \u2014 Validar em tempo de execu\u00e7\u00e3o (watermark)&quot;,&quot;text&quot;:&quot;5.5 Passo 5 \u2014 Validar em tempo de execu\u00e7\u00e3o (watermark)&quot;,&quot;link&quot;:&quot;eb-table-content-30&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.6 Passo 6 \u2014 Habilitar prote\u00e7\u00f5es obrigat\u00f3rias&quot;,&quot;text&quot;:&quot;5.6 Passo 6 \u2014 Habilitar prote\u00e7\u00f5es obrigat\u00f3rias&quot;,&quot;link&quot;:&quot;eb-table-content-31&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.7 Passo 7 \u2014 Preferir cria\u00e7\u00e3o est\u00e1tica quando poss\u00edvel&quot;,&quot;text&quot;:&quot;5.7 Passo 7 \u2014 Preferir cria\u00e7\u00e3o est\u00e1tica quando poss\u00edvel&quot;,&quot;link&quot;:&quot;eb-table-content-32&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;Erros Comuns, Sintomas em Campo e Boas Pr\u00e1ticas Consolidadas&quot;,&quot;text&quot;:&quot;Erros Comuns, Sintomas em Campo e Boas Pr\u00e1ticas Consolidadas&quot;,&quot;link&quot;:&quot;eb-table-content-33&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;6.1 Sintomas t\u00edpicos de erro de stack&quot;,&quot;text&quot;:&quot;6.1 Sintomas t\u00edpicos de erro de stack&quot;,&quot;link&quot;:&quot;eb-table-content-34&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;6.2 Sintomas t\u00edpicos de erro de heap&quot;,&quot;text&quot;:&quot;6.2 Sintomas t\u00edpicos de erro de heap&quot;,&quot;link&quot;:&quot;eb-table-content-35&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;6.3 Erros conceituais mais comuns&quot;,&quot;text&quot;:&quot;6.3 Erros conceituais mais comuns&quot;,&quot;link&quot;:&quot;63-erros-conceituais-mais-comuns&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;6.4 Boas pr\u00e1ticas consolidadas em projetos profissionais&quot;,&quot;text&quot;:&quot;6.4 Boas pr\u00e1ticas consolidadas em projetos profissionais&quot;,&quot;link&quot;:&quot;eb-table-content-37&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;6.5 Conclus\u00e3o t\u00e9cnica&quot;,&quot;text&quot;:&quot;6.5 Conclus\u00e3o t\u00e9cnica&quot;,&quot;link&quot;:&quot;eb-table-content-38&quot;}]" data-visible="[true,true,true,true,true,true]" data-delete-headers="[{&quot;label&quot;:&quot;Por que dimensionar corretamente Stack e Heap em sistemas com FreeRTOS&quot;,&quot;value&quot;:&quot;por-que-dimensionar-corretamente-stack-e-heap-em-sistemas-com-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Modelo de Mem\u00f3ria em Sistemas com FreeRTOS: CTB, Heap e Stack&quot;,&quot;value&quot;:&quot;modelo-de-mem\u00f3ria-em-sistemas-com-freertos-ctb-heap-e-stack&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2.1 CTB (Control Block \/ TCB \u2013 Task Control Block)&quot;,&quot;value&quot;:&quot;21-ctb-control-block-tcb-task-control-block&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2.2 Heap no FreeRTOS&quot;,&quot;value&quot;:&quot;22-heap-no-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2.3 Stack no FreeRTOS&quot;,&quot;value&quot;:&quot;23-stack-no-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2.4 Rela\u00e7\u00e3o entre Heap, TCB e Stack&quot;,&quot;value&quot;:&quot;24-rela\u00e7\u00e3o-entre-heap-tcb-e-stack&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Stack no FreeRTOS: Funcionamento Interno, Cortex-M e Impacto das Interrup\u00e7\u00f5es&quot;,&quot;value&quot;:&quot;stack-no-freertos-funcionamento-interno-cortex-m-e-impacto-das-interrup\u00e7\u00f5es&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.1 O que realmente vai para a stack de uma task&quot;,&quot;value&quot;:&quot;31-o-que-realmente-vai-para-a-stack-de-uma-task&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.2 Empilhamento autom\u00e1tico no Cortex-M (hardware stacking)&quot;,&quot;value&quot;:&quot;32-empilhamento-autom\u00e1tico-no-cortex-m-hardware-stacking&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.3 Stack da Task vs Stack da Interrup\u00e7\u00e3o&quot;,&quot;value&quot;:&quot;33-stack-da-task-vs-stack-da-interrup\u00e7\u00e3o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.4 F\u00f3rmula pr\u00e1tica para estimativa inicial de stack&quot;,&quot;value&quot;:&quot;34-f\u00f3rmula-pr\u00e1tica-para-estimativa-inicial-de-stack&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.5 Erros cl\u00e1ssicos de dimensionamento de stack&quot;,&quot;value&quot;:&quot;35-erros-cl\u00e1ssicos-de-dimensionamento-de-stack&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3.6 Detec\u00e7\u00e3o e medi\u00e7\u00e3o de stack no FreeRTOS&quot;,&quot;value&quot;:&quot;36-detec\u00e7\u00e3o-e-medi\u00e7\u00e3o-de-stack-no-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Heap no FreeRTOS: Modelos, Fragmenta\u00e7\u00e3o e Impacto no Sistema&quot;,&quot;value&quot;:&quot;heap-no-freertos-modelos-fragmenta\u00e7\u00e3o-e-impacto-no-sistema&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.1 O que realmente consome heap no FreeRTOS&quot;,&quot;value&quot;:&quot;41-o-que-realmente-consome-heap-no-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.2 Os cinco modelos de heap do FreeRTOS&quot;,&quot;value&quot;:&quot;42-os-cinco-modelos-de-heap-do-freertos&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;heap_1&quot;,&quot;value&quot;:&quot;heap_1&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;heap_2&quot;,&quot;value&quot;:&quot;heap_2&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;heap_3&quot;,&quot;value&quot;:&quot;heap_3&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;heap_4 (mais usado na pr\u00e1tica)&quot;,&quot;value&quot;:&quot;heap_4-mais-usado-na-pr\u00e1tica&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;heap_5&quot;,&quot;value&quot;:&quot;heap_5&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.3 Estrutura interna do heap_4&quot;,&quot;value&quot;:&quot;43-estrutura-interna-do-heap_4&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.4 C\u00e1lculo do heap necess\u00e1rio (estimativa inicial)&quot;,&quot;value&quot;:&quot;44-c\u00e1lculo-do-heap-necess\u00e1rio-estimativa-inicial&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.5 Fragmenta\u00e7\u00e3o: o inimigo invis\u00edvel&quot;,&quot;value&quot;:&quot;45-fragmenta\u00e7\u00e3o-o-inimigo-invis\u00edvel&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4.6 Heap est\u00e1tico vs heap din\u00e2mico&quot;,&quot;value&quot;:&quot;46-heap-est\u00e1tico-vs-heap-din\u00e2mico&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Estrat\u00e9gia Profissional de Dimensionamento: M\u00e9todo Passo a Passo&quot;,&quot;value&quot;:&quot;estrat\u00e9gia-profissional-de-dimensionamento-m\u00e9todo-passo-a-passo&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.1 Passo 1 \u2014 Mapear todas as entidades que consomem mem\u00f3ria&quot;,&quot;value&quot;:&quot;51-passo-1-mapear-todas-as-entidades-que-consomem-mem\u00f3ria&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.2 Passo 2 \u2014 Dimensionar stack individualmente (n\u00e3o por m\u00e9dia)&quot;,&quot;value&quot;:&quot;52-passo-2-dimensionar-stack-individualmente-n\u00e3o-por-m\u00e9dia&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.3 Passo 3 \u2014 Converter tudo para palavras (n\u00e3o bytes)&quot;,&quot;value&quot;:&quot;53-passo-3-converter-tudo-para-palavras-n\u00e3o-bytes&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.4 Passo 4 \u2014 Calcular o heap total&quot;,&quot;value&quot;:&quot;54-passo-4-calcular-o-heap-total&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.5 Passo 5 \u2014 Validar em tempo de execu\u00e7\u00e3o (watermark)&quot;,&quot;value&quot;:&quot;55-passo-5-validar-em-tempo-de-execu\u00e7\u00e3o-watermark&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.6 Passo 6 \u2014 Habilitar prote\u00e7\u00f5es obrigat\u00f3rias&quot;,&quot;value&quot;:&quot;56-passo-6-habilitar-prote\u00e7\u00f5es-obrigat\u00f3rias&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.7 Passo 7 \u2014 Preferir cria\u00e7\u00e3o est\u00e1tica quando poss\u00edvel&quot;,&quot;value&quot;:&quot;57-passo-7-preferir-cria\u00e7\u00e3o-est\u00e1tica-quando-poss\u00edvel&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Erros Comuns, Sintomas em Campo e Boas Pr\u00e1ticas Consolidadas&quot;,&quot;value&quot;:&quot;erros-comuns-sintomas-em-campo-e-boas-pr\u00e1ticas-consolidadas&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6.1 Sintomas t\u00edpicos de erro de stack&quot;,&quot;value&quot;:&quot;61-sintomas-t\u00edpicos-de-erro-de-stack&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6.2 Sintomas t\u00edpicos de erro de heap&quot;,&quot;value&quot;:&quot;62-sintomas-t\u00edpicos-de-erro-de-heap&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6.3 Erros conceituais mais comuns&quot;,&quot;value&quot;:&quot;63-erros-conceituais-mais-comuns&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6.4 Boas pr\u00e1ticas consolidadas em projetos profissionais&quot;,&quot;value&quot;:&quot;64-boas-pr\u00e1ticas-consolidadas-em-projetos-profissionais&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6.5 Conclus\u00e3o t\u00e9cnica&quot;,&quot;value&quot;:&quot;65-conclus\u00e3o-t\u00e9cnica&quot;,&quot;isDelete&quot;:false}]" data-smooth="true" data-top-offset=""><div class="eb-toc__list-wrap"><ul class="eb-toc__list"><li><a href="#por-que-dimensionar-corretamente-stack-e-heap-em-sistemas-com-freertos">Por que dimensionar corretamente Stack e Heap em sistemas com FreeRTOS</a><li><a href="#eb-table-content-1">Modelo de Memória em Sistemas com FreeRTOS: CTB, Heap e Stack</a><ul class="eb-toc__list"><li><a href="#21-ctb-control-block-tcb-task-control-block">2.1 CTB (Control Block / TCB – Task Control Block)</a><li><a href="#22-heap-no-freertos">2.2 Heap no FreeRTOS</a><li><a href="#23-stack-no-freertos">2.3 Stack no FreeRTOS</a><li><a href="#eb-table-content-5">2.4 Relação entre Heap, TCB e Stack</a></li></ul><li><a href="#eb-table-content-6">Stack no FreeRTOS: Funcionamento Interno, Cortex-M e Impacto das Interrupções</a><ul class="eb-toc__list"><li><a href="#31-o-que-realmente-vai-para-a-stack-de-uma-task">3.1 O que realmente vai para a stack de uma task</a><li><a href="#eb-table-content-8">3.2 Empilhamento automático no Cortex-M (hardware stacking)</a><li><a href="#eb-table-content-9">3.3 Stack da Task vs Stack da Interrupção</a><li><a href="#eb-table-content-10">3.4 Fórmula prática para estimativa inicial de stack</a><li><a href="#eb-table-content-11">3.5 Erros clássicos de dimensionamento de stack</a><li><a href="#eb-table-content-12">3.6 Detecção e medição de stack no FreeRTOS</a></li></ul><li><a href="#eb-table-content-13">Heap no FreeRTOS: Modelos, Fragmentação e Impacto no Sistema</a><ul class="eb-toc__list"><li><a href="#41-o-que-realmente-consome-heap-no-freertos">4.1 O que realmente consome heap no FreeRTOS</a><li><a href="#42-os-cinco-modelos-de-heap-do-freertos">4.2 Os cinco modelos de heap do FreeRTOS</a><ul class="eb-toc__list"><li><a href="#heap_1">heap_1</a><li><a href="#heap_2">heap_2</a><li><a href="#heap_3">heap_3</a><li><a href="#eb-table-content-19">heap_4 (mais usado na prática)</a><li><a href="#heap_5">heap_5</a></li></ul><li><a href="#43-estrutura-interna-do-heap_4">4.3 Estrutura interna do heap_4</a><li><a href="#eb-table-content-22">4.4 Cálculo do heap necessário (estimativa inicial)</a><li><a href="#eb-table-content-23">4.5 Fragmentação: o inimigo invisível</a><li><a href="#eb-table-content-24">4.6 Heap estático vs heap dinâmico</a></li></ul><li><a href="#eb-table-content-25">Estratégia Profissional de Dimensionamento: Método Passo a Passo</a><ul class="eb-toc__list"><li><a href="#eb-table-content-26">5.1 Passo 1 — Mapear todas as entidades que consomem memória</a><li><a href="#eb-table-content-27">5.2 Passo 2 — Dimensionar stack individualmente (não por média)</a><li><a href="#eb-table-content-28">5.3 Passo 3 — Converter tudo para palavras (não bytes)</a><li><a href="#54-passo-4-calcular-o-heap-total">5.4 Passo 4 — Calcular o heap total</a><li><a href="#eb-table-content-30">5.5 Passo 5 — Validar em tempo de execução (watermark)</a><li><a href="#eb-table-content-31">5.6 Passo 6 — Habilitar proteções obrigatórias</a><li><a href="#eb-table-content-32">5.7 Passo 7 — Preferir criação estática quando possível</a></li></ul><li><a href="#eb-table-content-33">Erros Comuns, Sintomas em Campo e Boas Práticas Consolidadas</a><ul class="eb-toc__list"><li><a href="#eb-table-content-34">6.1 Sintomas típicos de erro de stack</a><li><a href="#eb-table-content-35">6.2 Sintomas típicos de erro de heap</a><li><a href="#63-erros-conceituais-mais-comuns">6.3 Erros conceituais mais comuns</a><li><a href="#eb-table-content-37">6.4 Boas práticas consolidadas em projetos profissionais</a><li><a href="#eb-table-content-38">6.5 Conclusão técnica</a></li></ul></ul></div></div></div></div></div>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><strong>Por que dimensionar corretamente Stack e Heap em sistemas com FreeRTOS</strong></h3>



<p class="wp-block-paragraph">Em sistemas embarcados baseados em RTOS, especialmente no FreeRTOS, o <strong>dimensionamento correto de memória</strong> não é apenas uma questão de otimização, mas de <strong>confiabilidade, previsibilidade temporal e segurança operacional</strong>. Diferente de aplicações desktop, onde há abundância de memória virtual, em microcontroladores lidamos com <strong>SRAM limitada</strong>, geralmente compartilhada entre <strong>heap, stacks das tasks, buffers de drivers, pilha de interrupções e dados globais</strong>.</p>



<p class="wp-block-paragraph">O FreeRTOS introduz um modelo explícito de gerenciamento de memória, separando claramente <strong>Heap do sistema</strong> e <strong>Stack de cada tarefa (Task Stack)</strong>. Essa separação permite maior controle, porém exige do desenvolvedor uma postura ativa: <strong>dimensionar mal significa falhas intermitentes, corrupção silenciosa de memória e resets imprevisíveis</strong>, muitas vezes difíceis de depurar. Em projetos com lwIP, USB, arquivos FAT ou criptografia, esses riscos aumentam drasticamente.</p>



<p class="wp-block-paragraph">Outro ponto crítico é que <strong>erros de stack e heap raramente se manifestam imediatamente</strong>. Um stack subdimensionado pode funcionar por horas ou dias até que uma função mais profunda, uma interrupção específica ou uma condição rara cause overflow. Já o heap mal dimensionado pode fragmentar ou simplesmente falhar ao criar uma task, mutex ou buffer, retornando erros difíceis de rastrear se não houver instrumentação adequada.</p>



<p class="wp-block-paragraph">Por isso, entender <strong>o que é Stack, o que é Heap, como o FreeRTOS os utiliza, como medi-los, como calcular margens seguras e como validar em tempo de execução</strong> é uma competência fundamental para qualquer engenheiro que desenvolva firmware profissional. Este artigo aborda esses pontos de forma sistemática, com foco prático em microcontroladores ARM Cortex-M, mas aplicável a qualquer arquitetura suportada pelo FreeRTOS.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/><p>The post <a href="https://mcu.tec.br/rtos/dimensionamento-de-pilha-stack-e-heap-no-freertos/">Dimensionamento de Pilha (Stack) e Heap no FreeRTOS</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1021</post-id>	</item>
	</channel>
</rss>
