<?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>Zephyr tutorial - MCU &amp; FPGA</title>
	<atom:link href="https://mcu.tec.br/tags/zephyr-tutorial/feed/" rel="self" type="application/rss+xml" />
	<link>https://mcu.tec.br</link>
	<description>Microcontroladores &#38; FPGA</description>
	<lastBuildDate>Thu, 22 Jan 2026 11:28:31 +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>Zephyr tutorial - MCU &amp; FPGA</title>
	<link>https://mcu.tec.br</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Criando um Projeto Zephyr RTOS no Arduino DUE – Guia Completo e Didático</title>
		<link>https://mcu.tec.br/rtos/criando-um-projeto-zephyr-rtos-no-arduino-due-guia-completo-e-didatico/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=criando-um-projeto-zephyr-rtos-no-arduino-due-guia-completo-e-didatico</link>
		
		<dc:creator><![CDATA[Carlos Delfino]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 09:01:10 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[RTOS]]></category>
		<category><![CDATA[Arduino DUE]]></category>
		<category><![CDATA[ARM Cortex-M3]]></category>
		<category><![CDATA[firmware profissional]]></category>
		<category><![CDATA[rtos]]></category>
		<category><![CDATA[SAM3X8E]]></category>
		<category><![CDATA[sistemas embarcados]]></category>
		<category><![CDATA[Zephyr Arduino]]></category>
		<category><![CDATA[Zephyr RTOS]]></category>
		<category><![CDATA[Zephyr tutorial]]></category>
		<guid isPermaLink="false">https://mcu.tec.br/?p=1209</guid>

					<description><![CDATA[<p>Aprenda passo a passo como criar um projeto completo com Zephyr RTOS no Arduino DUE. Este tutorial detalhado e didático explica desde a estrutura do workspace, configuração do CMake e Kconfig, até a compilação, gravação e execução do firmware no microcontrolador SAM3X8E. Ideal para quem deseja sair do modelo Arduino tradicional e aprender RTOS profissional em ARM Cortex-M, com exemplos práticos, explicações profundas e foco em arquitetura de sistemas embarcados.</p>
<p>The post <a href="https://mcu.tec.br/rtos/criando-um-projeto-zephyr-rtos-no-arduino-due-guia-completo-e-didatico/">Criando um Projeto Zephyr RTOS no Arduino DUE – Guia Completo e Didático</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></description>
										<content:encoded><![CDATA[<div class="root-eb-toc-nkf1j wp-block-essential-blocks-table-of-contents"><div class="eb-parent-wrapper eb-parent-eb-toc-nkf1j "><div class="eb-toc-container eb-toc-nkf1j  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;:2,&quot;content&quot;:&quot;1. Introdu\u00e7\u00e3o: por que usar Zephyr no Arduino DUE&quot;,&quot;text&quot;:&quot;1. Introdu\u00e7\u00e3o: por que usar Zephyr no Arduino DUE&quot;,&quot;link&quot;:&quot;eb-table-content-0&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;2. Vis\u00e3o geral do suporte do Zephyr ao Arduino DUE&quot;,&quot;text&quot;:&quot;2. Vis\u00e3o geral do suporte do Zephyr ao Arduino DUE&quot;,&quot;link&quot;:&quot;eb-table-content-1&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;3. Pr\u00e9-requisitos do ambiente de desenvolvimento&quot;,&quot;text&quot;:&quot;3. Pr\u00e9-requisitos do ambiente de desenvolvimento&quot;,&quot;link&quot;:&quot;eb-table-content-2&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;4. Estrutura recomendada de workspace&quot;,&quot;text&quot;:&quot;4. Estrutura recomendada de workspace&quot;,&quot;link&quot;:&quot;4-estrutura-recomendada-de-workspace&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;5. Criando o projeto do zero para o Arduino DUE&quot;,&quot;text&quot;:&quot;5. Criando o projeto do zero para o Arduino DUE&quot;,&quot;link&quot;:&quot;5-criando-o-projeto-do-zero-para-o-arduino-due&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.1 Criando o diret\u00f3rio da aplica\u00e7\u00e3o&quot;,&quot;text&quot;:&quot;5.1 Criando o diret\u00f3rio da aplica\u00e7\u00e3o&quot;,&quot;link&quot;:&quot;eb-table-content-5&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;5.2 Estrutura m\u00ednima de um projeto Zephyr&quot;,&quot;text&quot;:&quot;5.2 Estrutura m\u00ednima de um projeto Zephyr&quot;,&quot;link&quot;:&quot;eb-table-content-6&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;6. Arquivo CMakeLists.txt: integra\u00e7\u00e3o com o Zephyr&quot;,&quot;text&quot;:&quot;6. Arquivo CMakeLists.txt: integra\u00e7\u00e3o com o Zephyr&quot;,&quot;link&quot;:&quot;eb-table-content-7&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;O que esse arquivo faz, exatamente?&quot;,&quot;text&quot;:&quot;O que esse arquivo faz, exatamente?&quot;,&quot;link&quot;:&quot;o-que-esse-arquivo-faz-exatamente&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;7. Arquivo prj.conf: configura\u00e7\u00e3o do kernel (Kconfig)&quot;,&quot;text&quot;:&quot;7. Arquivo prj.conf: configura\u00e7\u00e3o do kernel (Kconfig)&quot;,&quot;link&quot;:&quot;eb-table-content-9&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;8. Arquivo main.c: primeira aplica\u00e7\u00e3o&quot;,&quot;text&quot;:&quot;8. Arquivo main.c: primeira aplica\u00e7\u00e3o&quot;,&quot;link&quot;:&quot;eb-table-content-10&quot;},{&quot;level&quot;:3,&quot;content&quot;:&quot;Conceitos importantes aqui&quot;,&quot;text&quot;:&quot;Conceitos importantes aqui&quot;,&quot;link&quot;:&quot;conceitos-importantes-aqui&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;9. Compilando o projeto para o Arduino DUE&quot;,&quot;text&quot;:&quot;9. Compilando o projeto para o Arduino DUE&quot;,&quot;link&quot;:&quot;9-compilando-o-projeto-para-o-arduino-due&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;10. Gravando o firmware no Arduino DUE&quot;,&quot;text&quot;:&quot;10. Gravando o firmware no Arduino DUE&quot;,&quot;link&quot;:&quot;10-gravando-o-firmware-no-arduino-due&quot;},{&quot;level&quot;:2,&quot;content&quot;:&quot;11. Pr\u00f3ximos passos&quot;,&quot;text&quot;:&quot;11. Pr\u00f3ximos passos&quot;,&quot;link&quot;:&quot;eb-table-content-14&quot;}]" data-visible="[true,true,true,true,true,true]" data-delete-headers="[{&quot;label&quot;:&quot;1. Introdu\u00e7\u00e3o: por que usar Zephyr no Arduino DUE&quot;,&quot;value&quot;:&quot;1-introdu\u00e7\u00e3o-por-que-usar-zephyr-no-arduino-due&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;2. Vis\u00e3o geral do suporte do Zephyr ao Arduino DUE&quot;,&quot;value&quot;:&quot;2-vis\u00e3o-geral-do-suporte-do-zephyr-ao-arduino-due&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;3. Pr\u00e9-requisitos do ambiente de desenvolvimento&quot;,&quot;value&quot;:&quot;3-pr\u00e9-requisitos-do-ambiente-de-desenvolvimento&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;4. Estrutura recomendada de workspace&quot;,&quot;value&quot;:&quot;4-estrutura-recomendada-de-workspace&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5. Criando o projeto do zero para o Arduino DUE&quot;,&quot;value&quot;:&quot;5-criando-o-projeto-do-zero-para-o-arduino-due&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.1 Criando o diret\u00f3rio da aplica\u00e7\u00e3o&quot;,&quot;value&quot;:&quot;51-criando-o-diret\u00f3rio-da-aplica\u00e7\u00e3o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;5.2 Estrutura m\u00ednima de um projeto Zephyr&quot;,&quot;value&quot;:&quot;52-estrutura-m\u00ednima-de-um-projeto-zephyr&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;6. Arquivo CMakeLists.txt: integra\u00e7\u00e3o com o Zephyr&quot;,&quot;value&quot;:&quot;6-arquivo-cmakeliststxt-integra\u00e7\u00e3o-com-o-zephyr&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;O que esse arquivo faz, exatamente?&quot;,&quot;value&quot;:&quot;o-que-esse-arquivo-faz-exatamente&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;7. Arquivo prj.conf: configura\u00e7\u00e3o do kernel (Kconfig)&quot;,&quot;value&quot;:&quot;7-arquivo-prjconf-configura\u00e7\u00e3o-do-kernel-kconfig&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;8. Arquivo main.c: primeira aplica\u00e7\u00e3o&quot;,&quot;value&quot;:&quot;8-arquivo-mainc-primeira-aplica\u00e7\u00e3o&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;Conceitos importantes aqui&quot;,&quot;value&quot;:&quot;conceitos-importantes-aqui&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;9. Compilando o projeto para o Arduino DUE&quot;,&quot;value&quot;:&quot;9-compilando-o-projeto-para-o-arduino-due&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;10. Gravando o firmware no Arduino DUE&quot;,&quot;value&quot;:&quot;10-gravando-o-firmware-no-arduino-due&quot;,&quot;isDelete&quot;:false},{&quot;label&quot;:&quot;11. Pr\u00f3ximos passos&quot;,&quot;value&quot;:&quot;11-pr\u00f3ximos-passos&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="#eb-table-content-0">1. Introdução: por que usar Zephyr no Arduino DUE</a><li><a href="#eb-table-content-1">2. Visão geral do suporte do Zephyr ao Arduino DUE</a><li><a href="#eb-table-content-2">3. Pré-requisitos do ambiente de desenvolvimento</a><li><a href="#4-estrutura-recomendada-de-workspace">4. Estrutura recomendada de workspace</a><li><a href="#5-criando-o-projeto-do-zero-para-o-arduino-due">5. Criando o projeto do zero para o Arduino DUE</a><ul class="eb-toc__list"><li><a href="#eb-table-content-5">5.1 Criando o diretório da aplicação</a><li><a href="#eb-table-content-6">5.2 Estrutura mínima de um projeto Zephyr</a></li></ul><li><a href="#eb-table-content-7">6. Arquivo CMakeLists.txt: integração com o Zephyr</a><ul class="eb-toc__list"><li><a href="#o-que-esse-arquivo-faz-exatamente">O que esse arquivo faz, exatamente?</a></li></ul><li><a href="#eb-table-content-9">7. Arquivo prj.conf: configuração do kernel (Kconfig)</a><li><a href="#eb-table-content-10">8. Arquivo main.c: primeira aplicação</a><ul class="eb-toc__list"><li><a href="#conceitos-importantes-aqui">Conceitos importantes aqui</a></li></ul><li><a href="#9-compilando-o-projeto-para-o-arduino-due">9. Compilando o projeto para o Arduino DUE</a><li><a href="#10-gravando-o-firmware-no-arduino-due">10. Gravando o firmware no Arduino DUE</a><li><a href="#eb-table-content-14">11. Próximos passos</a></ul></div></div></div></div></div>


<h2 class="wp-block-heading">1. Introdução: por que usar Zephyr no Arduino DUE</h2>



<p class="wp-block-paragraph">O <strong>Zephyr Project</strong> é um sistema operacional de tempo real (RTOS – <em>Real-Time Operating System</em>) moderno, modular e altamente configurável, projetado para sistemas embarcados que exigem previsibilidade temporal, portabilidade e escalabilidade. Diferente do ecossistema Arduino tradicional — baseado em <em>superloop</em> e bibliotecas monolíticas — o Zephyr oferece um modelo arquitetural profissional, alinhado a práticas industriais, como <em>device tree</em>, <em>Kconfig</em>, <em>CMake</em> e um kernel preemptivo completo.</p>



<p class="wp-block-paragraph">O <strong>Arduino DUE</strong> ocupa um espaço interessante nesse contexto. Baseado no microcontrolador <strong>Atmel/Microchip SAM3X8E</strong>, um ARM Cortex-M3 de 32 bits operando a 84 MHz, ele oferece recursos raros no “mundo Arduino”: barramento externo, controlador DMA (Direct Memory Access), múltiplas UARTs, SPI, TWI (I²C – <em>Inter-Integrated Circuit</em>), além de USB nativo (<em>USB OTG</em>). Esses recursos fazem do DUE uma excelente plataforma didática para aprender Zephyr em um hardware amplamente conhecido.</p>



<p class="wp-block-paragraph">Neste artigo, você aprenderá <strong>passo a passo, de forma minuciosa</strong>, como criar um projeto Zephyr totalmente funcional para o Arduino DUE, utilizando <strong>todos os recursos documentados oficialmente</strong> pela fundação Zephyr para essa placa. O foco não será apenas “compilar e rodar”, mas <strong>entender a arquitetura do projeto</strong>, as decisões de configuração e o papel de cada arquivo envolvido.</p>



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



<h2 class="wp-block-heading">2. Visão geral do suporte do Zephyr ao Arduino DUE</h2>



<p class="wp-block-paragraph">Antes de escrever qualquer linha de código, é fundamental entender <strong>como o Zephyr enxerga o Arduino DUE</strong>. No Zephyr, placas não são tratadas como “kits genéricos”, mas como <strong>descrições formais de hardware</strong>, compostas por:</p>



<ul class="wp-block-list">
<li><strong>Board Definition</strong>: define CPU, clock, memória e periféricos básicos</li>



<li><strong>Device Tree (DTS)</strong>: descreve os dispositivos de hardware de forma declarativa</li>



<li><strong>Kconfig da placa</strong>: habilita ou restringe funcionalidades do kernel</li>



<li><strong>Arquivos de build</strong>: integram a placa ao sistema CMake do Zephyr</li>
</ul>



<p class="wp-block-paragraph">No caso do Arduino DUE, o Zephyr fornece oficialmente:</p>



<ul class="wp-block-list">
<li>Arquivo de <em>board</em> baseado no <strong>SAM3X8E</strong></li>



<li>Mapeamento correto de pinos compatível com o layout do DUE</li>



<li>Suporte a:
<ul class="wp-block-list">
<li>GPIO (General Purpose Input/Output)</li>



<li>UART (console serial)</li>



<li>SPI</li>



<li>I²C (TWI no SAM)</li>



<li>Temporizadores e <em>SysTick</em></li>
</ul>
</li>



<li>Programação via <strong>porta USB de programação</strong> (a mesma usada com o bossac)</li>
</ul>



<p class="wp-block-paragraph">Isso significa que <strong>não é necessário criar uma placa customizada</strong> para começar: o Arduino DUE já está plenamente integrado ao ecossistema Zephyr.</p>



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



<h2 class="wp-block-heading">3. Pré-requisitos do ambiente de desenvolvimento</h2>



<p class="wp-block-paragraph">Antes de criar o projeto, o ambiente Zephyr <strong>precisa estar corretamente instalado</strong>. Assumiremos aqui que você já leu os artigos anteriores da série e possui:</p>



<ul class="wp-block-list">
<li>Linux (Ubuntu 22.04 ou superior recomendado)</li>



<li>Python 3.10+</li>



<li><code>west</code> (ferramenta de meta-build do Zephyr)</li>



<li>Zephyr SDK instalada</li>



<li>Toolchain ARM embarcada funcional</li>
</ul>



<p class="wp-block-paragraph">Para validar rapidamente se o ambiente está correto, execute:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>west --version
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">west --version</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">E depois:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>west boards | grep due
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">west boards | grep due</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Se o ambiente estiver correto, você verá a placa <strong>arduino_due</strong> listada entre as placas suportadas. Esse comando é extremamente importante: ele confirma que o Zephyr <strong>reconhece oficialmente</strong> o Arduino DUE no seu workspace.</p>



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



<h2 class="wp-block-heading">4. Estrutura recomendada de workspace</h2>



<p class="wp-block-paragraph">Um erro comum entre iniciantes é misturar código de aplicação com o repositório do Zephyr. A abordagem correta é usar um <strong>workspace limpo</strong>, com a seguinte estrutura conceitual:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>zephyr-workspace/
├── zephyr/              # Código-fonte do Zephyr RTOS
├── modules/             # Módulos externos (opcional)
├── bootloader/          # Bootloaders (opcional)
└── arduino_due_app/     # SUA aplicação
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">zephyr-workspace/</span></span>
<span class="line"><span style="color: #D8DEE9FF">├── zephyr/              # Código-fonte do Zephyr RTOS</span></span>
<span class="line"><span style="color: #D8DEE9FF">├── modules/             # Módulos externos (opcional)</span></span>
<span class="line"><span style="color: #D8DEE9FF">├── bootloader/          # Bootloaders (opcional)</span></span>
<span class="line"><span style="color: #D8DEE9FF">└── arduino_due_app/     # SUA aplicação</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Dentro da pasta <code>arduino_due_app</code>, ficará <strong>apenas o código da aplicação</strong>, sem dependências diretas do kernel. Essa separação é crucial para manter o projeto sustentável e escalável.</p>



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



<h2 class="wp-block-heading">5. Criando o projeto do zero para o Arduino DUE</h2>



<p class="wp-block-paragraph">Agora vamos criar efetivamente o projeto.</p>



<h3 class="wp-block-heading">5.1 Criando o diretório da aplicação</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>mkdir arduino_due_app
cd arduino_due_app
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">mkdir arduino_due_app</span></span>
<span class="line"><span style="color: #D8DEE9FF">cd arduino_due_app</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">5.2 Estrutura mínima de um projeto Zephyr</h3>



<p class="wp-block-paragraph">Crie a seguinte estrutura inicial:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>arduino_due_app/
├── CMakeLists.txt
├── prj.conf
└── src/
    └── main.c
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">arduino_due_app/</span></span>
<span class="line"><span style="color: #D8DEE9FF">├── CMakeLists.txt</span></span>
<span class="line"><span style="color: #D8DEE9FF">├── prj.conf</span></span>
<span class="line"><span style="color: #D8DEE9FF">└── src/</span></span>
<span class="line"><span style="color: #D8DEE9FF">    └── main.c</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Essa é a <strong>estrutura mínima obrigatória</strong> para qualquer aplicação Zephyr.</p>



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



<h2 class="wp-block-heading">6. Arquivo <code>CMakeLists.txt</code>: integração com o Zephyr</h2>



<p class="wp-block-paragraph">Crie o arquivo <code>CMakeLists.txt</code> com o conteúdo:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>cmake_minimum_required(VERSION 3.20.0)

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(arduino_due_app)

target_sources(app PRIVATE src/main.c)
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">cmake_minimum_required(VERSION 3.20.0)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})</span></span>
<span class="line"><span style="color: #D8DEE9FF">project(arduino_due_app)</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">target_sources(app PRIVATE src/main.c)</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">O que esse arquivo faz, exatamente?</h3>



<ul class="wp-block-list">
<li><code>cmake_minimum_required</code>: garante compatibilidade mínima do CMake</li>



<li><code>find_package(Zephyr ...)</code>: importa todo o sistema de build do Zephyr</li>



<li><code>project(...)</code>: define o nome lógico do projeto</li>



<li><code>target_sources(...)</code>: registra os arquivos C da aplicação</li>
</ul>



<p class="wp-block-paragraph">Aqui ocorre algo importante: <strong>você não define compilador, flags ou linker script</strong>. Tudo isso é herdado automaticamente da definição da placa (<code>arduino_due</code>) e do kernel.</p>



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



<h2 class="wp-block-heading">7. Arquivo <code>prj.conf</code>: configuração do kernel (Kconfig)</h2>



<p class="wp-block-paragraph">O <code>prj.conf</code> controla <strong>quais partes do kernel Zephyr serão compiladas</strong>.</p>



<p class="wp-block-paragraph">Comece com o mínimo funcional:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>CONFIG_PRINTK=y
CONFIG_SERIAL=y
CONFIG_CONSOLE=y
CONFIG_UART_CONSOLE=y
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">CONFIG_PRINTK=y</span></span>
<span class="line"><span style="color: #D8DEE9FF">CONFIG_SERIAL=y</span></span>
<span class="line"><span style="color: #D8DEE9FF">CONFIG_CONSOLE=y</span></span>
<span class="line"><span style="color: #D8DEE9FF">CONFIG_UART_CONSOLE=y</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Essas opções habilitam:</p>



<ul class="wp-block-list">
<li><code>printk()</code> – saída básica de debug</li>



<li>Driver de porta serial</li>



<li>Console padrão via UART</li>
</ul>



<p class="wp-block-paragraph">No Arduino DUE, isso será mapeado automaticamente para a UART correta definida no <em>device tree</em> da placa.</p>



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



<h2 class="wp-block-heading">8. Arquivo <code>main.c</code>: primeira aplicação</h2>



<p class="wp-block-paragraph">Crie <code>src/main.c</code>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>#include &lt;zephyr/kernel.h>
#include &lt;zephyr/sys/printk.h>

int main(void)
{
    printk("Zephyr rodando no Arduino DUE!\n");

    while (1) {
        printk("Tick\n");
        k_sleep(K_SECONDS(1));
    }

    return 0;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">#include &lt;zephyr/kernel.h&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">#include &lt;zephyr/sys/printk.h&gt;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">int main(void)</span></span>
<span class="line"><span style="color: #D8DEE9FF">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">    printk(&quot;Zephyr rodando no Arduino DUE!\n&quot;);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    while (1) {</span></span>
<span class="line"><span style="color: #D8DEE9FF">        printk(&quot;Tick\n&quot;);</span></span>
<span class="line"><span style="color: #D8DEE9FF">        k_sleep(K_SECONDS(1));</span></span>
<span class="line"><span style="color: #D8DEE9FF">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9FF">    return 0;</span></span>
<span class="line"><span style="color: #D8DEE9FF">}</span></span>
<span class="line"></span></code></pre></div>



<h3 class="wp-block-heading">Conceitos importantes aqui</h3>



<ul class="wp-block-list">
<li><code>#include &lt;zephyr/kernel.h&gt;</code>: acesso ao kernel, threads e temporização</li>



<li><code>printk()</code>: saída síncrona simples (não é <code>printf</code>)</li>



<li><code>k_sleep()</code>: API de temporização do kernel</li>



<li><code>main()</code> <strong>existe</strong>, mas não é o ponto de entrada real — o kernel já está inicializado antes dela ser chamada</li>
</ul>



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



<h2 class="wp-block-heading">9. Compilando o projeto para o Arduino DUE</h2>



<p class="wp-block-paragraph">Agora vem a parte crítica: <strong>build correto para a placa certa</strong>.</p>



<p class="wp-block-paragraph">Dentro da pasta <code>arduino_due_app</code>:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>west build -b arduino_due
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">west build -b arduino_due</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">O Zephyr irá:</p>



<ol class="wp-block-list">
<li>Ler a definição da placa Arduino DUE</li>



<li>Selecionar o SoC SAM3X8E</li>



<li>Configurar clocks, memória e periféricos</li>



<li>Gerar o firmware final</li>
</ol>



<p class="wp-block-paragraph">Se tudo estiver correto, o build terminará sem erros.</p>



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



<h2 class="wp-block-heading">10. Gravando o firmware no Arduino DUE</h2>



<p class="wp-block-paragraph">O Arduino DUE utiliza o <strong>bootloader SAM-BA</strong>, compatível com a ferramenta <code>bossac</code>.</p>



<p class="wp-block-paragraph">Com a placa conectada via <strong>porta USB de programação</strong>, execute:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>west flash
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">west flash</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">O Zephyr cuidará automaticamente do processo de gravação usando o método correto definido para a placa.</p>



<p class="wp-block-paragraph">Após o reset, abra um terminal serial:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>minicom -D /dev/ttyACM0 -b 115200
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">minicom -D /dev/ttyACM0 -b 115200</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Você deverá ver:</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Zephyr rodando no Arduino DUE!
Tick
Tick
Tick
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #D8DEE9FF">Zephyr rodando no Arduino DUE!</span></span>
<span class="line"><span style="color: #D8DEE9FF">Tick</span></span>
<span class="line"><span style="color: #D8DEE9FF">Tick</span></span>
<span class="line"><span style="color: #D8DEE9FF">Tick</span></span>
<span class="line"></span></code></pre></div>



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



<h2 class="wp-block-heading">11. Próximos passos</h2>



<p class="wp-block-paragraph">A partir daqui, você já tem:</p>



<ul class="wp-block-list">
<li>Um projeto Zephyr funcional</li>



<li>Build e flash corretamente configurados</li>



<li>Console serial ativo</li>



<li>Base sólida para evoluir</li>
</ul>



<p class="wp-block-paragraph">Nos próximos artigos, podemos avançar para:</p>



<ul class="wp-block-list">
<li>Device Tree do Arduino DUE em detalhes</li>



<li>GPIO e LEDs</li>



<li>UARTs adicionais</li>



<li>SPI e I²C</li>



<li>Timers e interrupções</li>



<li>Multithreading real no Cortex-M3</li>
</ul>



<p class="wp-block-paragraph"></p><p>The post <a href="https://mcu.tec.br/rtos/criando-um-projeto-zephyr-rtos-no-arduino-due-guia-completo-e-didatico/">Criando um Projeto Zephyr RTOS no Arduino DUE – Guia Completo e Didático</a> first appeared on <a href="https://mcu.tec.br">MCU & FPGA</a>.</p>]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1209</post-id>	</item>
	</channel>
</rss>
