{"id":41833,"date":"2021-04-26T10:06:29","date_gmt":"2021-04-26T02:06:29","guid":{"rendered":"\/blog\/?p=41833"},"modified":"2021-09-29T16:20:05","modified_gmt":"2021-09-29T08:20:05","slug":"rtos-basics-getting-started-with-microcontrollers","status":"publish","type":"post","link":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/","title":{"rendered":"RTOS Basics: Getting Started with Microcontrollers"},"content":{"rendered":"\n<p>If you\u2019re just starting out with microcontroller units (MCUs), you may have heard of RTOS and how they\u2019re extremely important for developing embedded applications. Today, I\u2019m going to share all about  RTOS basics and how you can get started, including:<\/p>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li>What RTOS is &amp; How it Works<\/li><li>Benefits of Using an RTOS<\/li><li>Considerations when Choosing an RTOS<\/li><li>RTOS Recommendations &amp; Development Platforms<\/li><li>How to multitask a microcontroller with FreeRTOS<\/li><\/ul>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1030\" height=\"601\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1030x601.jpg\" alt=\"\" class=\"wp-image-41860\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1030x601.jpg 1030w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-300x175.jpg 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-768x448.jpg 768w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1536x896.jpg 1536w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-2048x1195.jpg 2048w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1024x597.jpg 1024w\" sizes=\"(max-width: 1030px) 100vw, 1030px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is RTOS?<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>RTOS stands for <strong>Real-Time Operating System<\/strong>. As the name suggests, it is an operating system (OS) that is designed to process or respond to incoming data in real time &#8211; but what does \u201creal time\u201d mean?<\/p>\n\n\n\n<p>Real time systems are time-bound systems that have <strong>strict timing constraints and requirements<\/strong>. That means that the processor must complete each task within their given time constraints so that the following task can be <strong>executed on time<\/strong>, otherwise the system is considered to have failed.<\/p>\n\n\n\n<p>The true value of RTOS, however, lies in its ability to <strong>maintain timing requirements while enabling multitasking<\/strong>.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Today, RTOS are used in many embedded applications, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Medical Equipment such as Pacemakers<\/li><li>Defence Systems, such as Radars<\/li><li>Air Traffic \/ Aircraft Control Systems<\/li><li>Networked Multimedia Systems<\/li><\/ul>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How does RTOS work?<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>For context, each processor core in your computer can in reality only execute one program at a time. To provide the illusion of multitasking, the operating system\u2019s <strong>scheduler <\/strong>is responsible for deciding which programs to run when. The scheduler switches rapidly between tasks to make it appear that different programs are being executed at the same time.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/AN3x-W44FyFzOnwlJYVa5wloGOJN9RoUodG-objRPushJYkMuiU1I7K1KyueMpiAh0BZpFH311yUlJNC0cZkYVia__JnlC8C5vhIZP-obUzEr5cvZ5JIFr5whle4gtxMCls-7Rna\" alt=\"\" width=\"700\"\/><figcaption><em>Source: FreeRTOS<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The scheduler in RTOS is designed to have a predictable pattern of task execution, which is why RTOS are often described as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Deterministic_system\">deterministic systems<\/a>. This characteristic is especially important for embedded systems that often have real time requirements on the field, such as <strong>responding to an event within a strict period of time<\/strong>.<\/p>\n\n\n\n<p>For example, an embedded microcontroller may be required to trigger a failsafe within milliseconds of receiving sensor data that suggests imminent danger. What if our MCU was, in those precious milliseconds, busy maintaining its connection with a remote server? As you\u2019d expect &#8211; the results would be catastrophic.<\/p>\n\n\n\n<p>Fortunately, RTOS provides several ways to circumvent this problem. One way would be to assign the task of sensor data processing with a higher priority than maintaining the remote connection. That way, the scheduler will <strong>switch out tasks to meet the timing requirement<\/strong>, even if sensor data arrives while the MCU is busy.<\/p>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/JVXnOlyUmchBc683LY8twEL5UEkfrxUDgzq_JkGi3O2GJrD4x_r7MyQnWFybWLo1N5wxms7N0mwFcSuaODaGDoM_HXj-t3bgcMrWdgiDGB-V0lSedkRketrA1xWjUl8s11E9bBc2\" alt=\"\" width=\"700\"\/><figcaption><em>Source: FreeRTOS<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:5px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What are the benefits of RTOS?<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Traditionally, microcontroller programming involves sequential processing loops and state machines. While that is typically sufficient for smaller applications, many issues arise when <strong>application complexity<\/strong> is increased.<\/p>\n\n\n\n<p>One key problem lies in the fact that sequential code runs line by line to completion and cannot truly be interrupted. Continuing with our previous example: Once we call the function to maintain the server connection, the code must run to completion before any further action can be taken. On a large scale, this may introduce significant delays and make timing requirements difficult to meet without an RTOS.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>To Summarise:<\/strong> While you can successfully implement complex, time-sensitive applications without the use of an RTOS, the process will certainly be more difficult.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Still not convinced? Here are my <strong>top 3 reasons to use an RTOS<\/strong>.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>1.&nbsp; Applications built with RTOS are easy to maintain and scalable.<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>RTOS are built with a preemptive multitasking design paradigm, which is what allows tasks to switch from one to another based on need. Essentially, this allows you to build the code for each task separately, while leaving it to the RTOS to ensure that the timing requirements for each of them are met. Thus, if you add more tasks in the future, it will be easier to maintain your existing code!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>2.&nbsp; RTOS comes with pre-integrated communication stacks and drivers.<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>An RTOS typically includes communication stacks such as TCP\/IP and USB, along with the drivers required to support these protocols and other peripherals. By eliminating the need to implement such functionality from the ground up or introduce other uncertain third-party code, you can drastically reduce development time and costs!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>3.&nbsp; RTOS debug &amp; analysis tools help to improve your implementations.<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>As your applications increase in size, debugging becomes more difficult. Sometimes, problems such as unintended memory usage or leaks can be hard to diagnose without a strong understanding of system behaviour and resource usage. Fortunately, there are many tools for RTOS-aware debugging to help you monitor resource allocations to each task, such as <a href=\"https:\/\/www.segger.com\/products\/development-tools\/ozone-j-link-debugger\/technology\/rtos-awareness\/\">Segger\u2019s Ozone SDK<\/a>.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Choosing an RTOS<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>So you\u2019re convinced that an RTOS is going to be the way forward for your next microcontroller project, but you\u2019re not sure which of the many options to choose from. While it ultimately boils down to your personal preference and your project requirements, here are some considerations to get you started.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Types of RTOS<\/strong><\/h3>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Hard Real Time<\/strong> &#8211; Task timings and deadlines are handled very strictly. (eg. critical healthcare, aircraft systems)<\/li><li><strong>Firm Real Time<\/strong> &#8211; Deadlines need to be followed, but not as strictly. (eg. video conferencing, GPS tracking)<\/li><li><strong>Soft Real Time<\/strong> &#8211; Timing constraints are not expressed as absolute values. (eg. online transactions, web browsing)<\/li><\/ul>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>RTOS Characteristics<\/strong><\/h3>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Performance<\/strong> &#8211; Can the RTOS perform well given your MCUs processing and memory specifications?<\/li><li><strong>Features<\/strong> &#8211; What features do you need in your RTOS? (eg. dynamic memory allocation)<\/li><li><strong>Cost<\/strong> &#8211; Is the RTOS free for use? If your project is commercial, what are the costs of licensing the software?<\/li><li><strong>Ecosystem<\/strong> &#8211; Does the RTOS run on a variety of microprocessor architectures? Does it have community support?<\/li><li><strong>Middleware<\/strong> &#8211; Is there middleware support for integration with external software components?<\/li><\/ul>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>RTOS Recommendations<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>As you can see, settling on an RTOS can be a real challenge when there are so many factors to consider. Yet, sometimes it&#8217;s best to simply get your feet wet and experiment with the various choices! Today, I\u2019d like to share three popular RTOS that you might be interested in!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/rtos\/\"><strong>Azure RTOS<\/strong><\/a><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Azure RTOS is an embedded development suite offered by Microsoft, offering a small but powerful operating system on resource-constrained devices. Azure RTOS features a number of pre-integrated components, such as Azure RTOS NetX for<strong> TCP\/IP protocols<\/strong> and Azure RTOS FileX for <strong>high performance filesystems<\/strong>. Coming from one of the biggest players in the market, you can expect Azure RTOS to feature predictably fast performance, robust security, and compliance with industry standards!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/ejcTt4N44ijTrEMwBFtETjys-aHtyG0kmOOkVgf5xjNvTwVQnrXASWJgs2IRgzevhQeIKJLJFkYWrVm-Vw3Wa8n0GuHXOtp05p6csRCD7iMnPWJ6MaxjNjzz7u4agXleMwEZkUua\" alt=\"\" width=\"400\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>What makes Azure RTOS special is its <strong>seamless integration with Azure IoT<\/strong>, which is the IoT cloud platform by Microsoft. That means that you can connect, monitor, and control your IoT devices running Azure RTOS easily and conveniently! To accelerate your development process, choose from a suite of IoT protocols, reference templates, or simply use their IoT Plug and Play with the Azure IoT device SDK.<\/p>\n\n\n\n<p>Azure RTOS is <strong>free to test and develop<\/strong>, with the full source code and getting started tutorials available on their <a href=\"https:\/\/github.com\/azure-rtos\">GitHub repositories<\/a>. If you are using one of the <a href=\"https:\/\/github.com\/azure-rtos\/threadx\/blob\/master\/LICENSED-HARDWARE.txt\">pre-licensed microcontrollers<\/a>, you do not have to purchase an additional production license!<\/p>\n\n\n\n<p>To learn more about what Azure RTOS has to offer, visit their <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/rtos\/#overview\">landing page<\/a>!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.freertos.org\/index.html\"><strong>FreeRTOS<\/strong><\/a><\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/L0xF-hWmqScQ4gZ1r_8j2nTRR2_s8doK5IjkZ4KDfkYnv2jkPXhPMU3IC1sD71qzY5xjgL1YzsZ-_4faoLOIbq2wPFNAAcPcBI8OB0a1jIaj6YnIDVPbSb_fnEcNGD_uxqVkXN0v\" alt=\"\" width=\"300\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>FreeRTOS is a well known open-source operating system in the IoT RTOS scene that has been extensively developed over more than a decade. It is offered as a kernel with <strong>modular IoT libraries<\/strong>, and was specially developed for microcontrollers (though it now has other uses as well). Hence, it also features a <strong>low memory footprint and power optimisation features<\/strong>. FreeRTOS is supported by Amazon, which means that you\u2019ll be able to take advantage of their libraries and support to interface your microcontrollers with Amazon\u2019s <a href=\"https:\/\/aws.amazon.com\/iot\/\">AWS IoT<\/a>!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/SV7SP9pIwtMsZ0tLnZU2-wt1TQ-fRhk56CPggMacMhA2WyZOJ9m1IZujsyMl1aLkHhGf1DJfL01difNN4kmRCgCxcvgzxvdbwOBa3EqvkH4jtKw3_ixoEv2RA_rYrFDuivfjYFsq\" alt=\"\" width=\"800\"\/><figcaption><em>Source: FreeRTOS.org<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>It is <strong>absolutely free<\/strong> to develop with FreeRTOS, thanks to its MIT license! You\u2019ll also be happy to know that FreeRTOS supports over 40 MCU architectures, including the latest RISC-V and ARMv8-M microcontrollers. In addition, releases come in <strong>LTS (long term support) versions<\/strong>, so the longevity of your devices with FreeRTOS will be guaranteed!<\/p>\n\n\n\n<p>To get started with FreeRTOS, visit their <a href=\"https:\/\/www.freertos.org\/index.html\">website<\/a> for more information and tutorials!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/os.mbed.com\/mbed-os\/\"><strong>Mbed OS<\/strong><\/a><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Mbed OS is also immensely popular for microcontrollers in IoT applications. Targeted at Arm Cortex-M microcontrollers, it includes all the features that you need to develop a connected product quickly, including libraries for security, storage, connectivity, device management and drivers for sensors &amp; I\/O.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/ivt9owfFqum2ofBJEEDqELdOHlQ6_AME-8owejJcX2gkKkyO2-2L1vNWOUqjDTP10t4TFJ6RDwld_IIlTqfo2a3lKGp9yz_UU-r53WHszxd8ZpfVt9QFwm3bkMJtQl8-jE9OUr4R\" alt=\"\" width=\"800\"\/><figcaption><em>Source: MbedOS<\/em><\/figcaption><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>One key advantage of MbedOS is their <a href=\"https:\/\/os.mbed.com\/studio\/\">Mbed Studio desktop IDE<\/a>, which allows you to write, debug code and deploy your applications in a comfortable and convenient manner. In addition, its popularity means you get to rely on thousands of developers all over the world for community support! Mbed OS is released under an Apache 2.0 license, so you can use it in commercial and personal projects at no cost!<\/p>\n\n\n\n<p>Visit the <a href=\"https:\/\/os.mbed.com\/mbed-os\/\">Mbed OS website<\/a> to learn more today!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>RTOS Platforms: Microcontroller Recommendations<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>In RTOS development, choosing the right hardware is just as important as the software! Here are my top picks for microcontrollers if you\u2019re looking to kickstart your RTOS journey.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html\"><strong>Seeeduino XIAO<\/strong><\/a><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Seeeduino XIAO is the smallest Arduino compatible board in the Seeeduino Family. Despite its small size, the Seeeduino XIAO is equipped with the powerful SAMD21 microchip and a variety of hardware interfaces. That means that you can use it with Azure RTOS, FreeRTOS and Mbed OS without a hitch!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/MVWE8y3E3rP3dvHEGDbjkxjs_kEoc70K_ohF13BC1sGmyHYxp6kQ6k5K1qs7Uaklm7whzdwO8bEE9PgSD-O0BjNKYGUvuTlXzT1iA0llz3NfsdeMovmugfZQeckb-uoN600gJHzB\" alt=\"\" width=\"400\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Product Features:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ARM Cortex-M0+ 32bit 48MHz microcontroller (SAMD21G18) with 256KB Flash, 32KB SRAM<\/li><li>Compatible with Arduino IDE &amp; MicroPython<\/li><li>Easy Project Operation: Breadboard-friendly<\/li><li>Small Size: As small as a thumb(20\u00d717.5mm) for wearable devices and small projects.<\/li><li>Multiple development interfaces: 11 digital\/analog pins, 10 PWM Pins, 1 DAC output, 1 SWD Bonding pad interface, 1 I2C interface, 1 UART interface, 1 SPI interface.<\/li><\/ul>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Keen to learn more about the Seeeduino XIAO? Visit its <a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html\">product page<\/a> on our Seeed Online Store now!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.seeedstudio.com\/Wio-Terminal-p-4509.html\"><strong>Wio Terminal<\/strong><\/a><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>The Wio Terminal is a complete Arduino development platform based on the ATSAMD51, with wireless connectivity powered by Realtek RTL8720DN. As an all-in-one microcontroller, it has an onboard 2.4\u201d LCD Display, IMU, microphone, buzzer, microSD card slot, light sensor &amp; infrared emitter. Similarly, the flexible ATSAMD chip allows you to use the Wio Terminal with Azure RTOS, FreeRTOS and MbedOS!<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/2W8wwwQorMRYlztPW9YhkHdMSUlBH2WMinBUsjqUiCxfGIOHMprCx-dTjtEFLToURXFJ6SDBwc0eL0wtV2IPcv632ZaE1rXcgeD7kUyrp5-36cgGJQlYa2rRSbjWd9Zl0nOjOOp0\" alt=\"\" width=\"400\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Product Features:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Powerful MCU: Microchip ATSAMD51P19 with ARM Cortex-M4F core running at 120MHz<\/li><li>Reliable Wireless Connectivity: Equipped with Realtek RTL8720DN, dual-band 2.4GHz \/ 5GHz Wi-Fi (supported only by Arduino)<\/li><li>Highly Integrated Design: 2.4\u201d LCD Screen, IMU and more practical add-ons housed in a compact enclosure with built-in magnets &amp; mounting holes<\/li><li>Raspberry Pi 40-pin Compatible GPIO<\/li><li>Compatible with over 300 plug&amp;play Grove modules to explore with IoT<\/li><li>USB OTG Support<\/li><li>Support Arduino, CircuitPython, Micropython, ArduPy, AT Firmware, Visual Studio Code<\/li><li>TELEC Certified<\/li><\/ul>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>If you\u2019re interested to pick up a Wio Terminal, please visit its <a href=\"https:\/\/www.seeedstudio.com\/Wio-Terminal-p-4509.html\">product page<\/a> on the Seeed Online Store!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/www.seeedstudio.com\/Raspberry-Pi-Pico-p-4832.html\"><strong>Raspberry Pi Pico<\/strong><\/a><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Our last recommendation today is the Raspberry Pi Pico, which is the latest microcontroller offering from the Raspberry Pi Foundation! It runs on the Raspberry Pi RP2040, which is a Dual-core ARM Cortex M0+ processor that is capable of up to 133MHz clock speeds. While having been on the market for only a short while, RTOS developments have already begun for this flexible board, click <a href=\"https:\/\/www.seeedstudio.com\/blog\/2021\/02\/05\/rust-rt-thread-os-freertos-come-to-the-raspberry-pi-pico\/\">here<\/a> to read more!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter is-resized\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/QR4-o4p_khYKj12WzmSdKhZleti5rWVIpVBtES-1-4BSa1dEY4qEsX4G2CXksAZm6wJsbvWBY-VMlAKSHBWaAzwALFHQtkbYH1yZWBpszG-9qhHXoGg3YNoAmM37-hKyHWAVo-Ub\" alt=\"\" width=\"500\"\/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Product Features:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz<\/li><li>264KB of SRAM, and 2MB of on-board Flash memory<\/li><li>Castellated module allows soldering direct to carrier boards<\/li><li>USB 1.1 Host and Device support<\/li><li>Low-power sleep and dormant modes<\/li><li>Comprehensive C\/C++\/Micropython SDK, software examples, and documentation<\/li><li>Drag &amp; drop programming using mass storage over USB<\/li><li>26 \u00d7 multi-function GPIO pins<\/li><li>2 \u00d7 SPI, 2 \u00d7 I2C, 2 \u00d7 UART, 3 \u00d7 12-bit ADC, 16 \u00d7 controllable PWM channels<\/li><li>Accurate clock and timer on-chip<\/li><li>Temperature sensor<\/li><li>Accelerated floating-point libraries on-chip<\/li><li>8 \u00d7 Programmable I\/O (PIO) state machines for custom peripheral support<\/li><\/ul>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To learn more about the Raspberry Pi Pico, please visit its <a href=\"https:\/\/www.seeedstudio.com\/Raspberry-Pi-Pico-p-4832.html\">product page<\/a> on the Seeed Online Store!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Demonstration: Running FreeRTOS on Wio Terminal<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>RTOS are very flexible and a great solution for making the most of our microcontrollers. Today, I\u2019d like to share a simple tutorial and demonstration on how multitasking can be achieved with FreeRTOS on the Wio Terminal.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Required Materials<\/strong><\/h3>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>To follow along, you can use any of our microcontroller boards that are based on the SAMD microchip. This includes:<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.seeedstudio.com\/Wio-Terminal-p-4509.html\">Wio Terminal<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-XIAO-Arduino-Microcontroller-SAMD21-Cortex-M0+-p-4426.html\">Seeeduino XIAO<\/a><\/li><li>Seeeduino Zero Series:<ul><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-Cortex-M0-p-4070.html\">Seeeduino Cortex-M0+<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-Lotus-Cortex-M0-p-2896.html\">Seeeduino Lotus Cortex-M0+<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Wio-Lite-W600-p-4155.html\">Wio Lite W600 &#8211; ATSAMD21 Cortex-M0 Wireless Development Board<\/a><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Wio-Lite-MG126-p-4189.html\">Wio Lite MG126 &#8211; ATSAMD21 Cortex-M0 Blue Wireless Development Board<\/a><\/li><\/ul><\/li><li><a href=\"https:\/\/www.seeedstudio.com\/Seeeduino-LoRaWAN-p-2780.html\">Seeeduino LoRaWAN<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Quick Start with FreeRTOS For Arduino<\/strong><\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 1: <\/strong>Download the <a href=\"https:\/\/github.com\/Seeed-Studio\/Seeed_Arduino_FreeRTOS\">Seeed_Arduino_FreeRTOS<\/a> repository as a ZIP file.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 2:<\/strong> Install the ZIP file as a library through the <a href=\"https:\/\/www.arduino.cc\/en\/software\">Arduino IDE<\/a>. Please <a href=\"https:\/\/wiki.seeedstudio.com\/How_to_install_Arduino_Library\/\">check here<\/a> for detailed instructions.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 3: <\/strong>Copy the following code into a new sketch and upload it to your Arduino board.<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Seeed_Arduino_FreeRTOS.h&gt;\n \nTaskHandle_t Handle_aTask;\nTaskHandle_t Handle_bTask;\n \nstatic void ThreadA(void* pvParameters) {\n    Serial.println(\"Thread A: Started\");\n \n    while (1) {\n        Serial.println(\"Hello World!\");\n        delay(1000);\n    }\n}\n \nstatic void ThreadB(void* pvParameters) {\n    Serial.println(\"Thread B: Started\");\n \n    for (int i = 0; i &lt; 10; i++) {\n        Serial.println(\"---This is Thread B---\");\n        delay(2000);\n    }\n    Serial.println(\"Thread B: Deleting\");\n    vTaskDelete(NULL);\n}\n \nvoid setup() {\n \n    Serial.begin(115200);\n \n    vNopDelayMS(1000); \/\/ prevents usb driver crash on startup, do not omit this\n    while(!Serial);  \/\/ Wait for Serial terminal to open port before starting program\n \n    Serial.println(\"\");\n    Serial.println(\"******************************\");\n    Serial.println(\"        Program start         \");\n    Serial.println(\"******************************\");\n \n    \/\/ Create the threads that will be managed by the rtos\n    \/\/ Sets the stack size and priority of each task\n    \/\/ Also initializes a handler pointer to each task, which are important to communicate with and retrieve info from tasks\n    xTaskCreate(ThreadA,     \"Task A\",       256, NULL, tskIDLE_PRIORITY + 2, &amp;Handle_aTask);\n    xTaskCreate(ThreadB,     \"Task B\",       256, NULL, tskIDLE_PRIORITY + 1, &amp;Handle_bTask);\n \n    \/\/ Start the RTOS, this function will never return and will schedule the tasks.\n    vTaskStartScheduler();\n}\n \nvoid loop() {\n    \/\/ NOTHING\n}<\/code><\/pre>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Step 4:<\/strong> Open the Serial Monitor on the Arduino IDE and watch the magic happen!<\/p>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/blog.seeedstudio.com\/wp-content\/uploads\/2021\/03\/helloworld.png\" alt=\"\" class=\"wp-image-41852\" width=\"600\" srcset=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/helloworld.png 1017w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/helloworld-300x205.png 300w, https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/helloworld-768x526.png 768w\" sizes=\"(max-width: 1017px) 100vw, 1017px\" \/><\/figure><\/div>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>This Hello World Example creates two threads that print different strings to the Serial Monitor at a different rate.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Thread A prints \u201cHello World\u201d,<\/li><li>while Thread B prints \u201c&#8212;This is Thread B&#8212;\u201d!<\/li><\/ul>\n\n\n\n<div style=\"height:10px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>And that concludes this quick tutorial!<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:1px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion &amp; More Resources<\/strong><\/h2>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>With that, we\u2019ve come to the end of this article! I hope you\u2019ve gotten a clearer idea of what RTOS basics and why they\u2019re important for microcontroller development. If you\u2019re keen to explore more RTOS beyond what I\u2019ve shared in detail, you may also want to explore <a href=\"https:\/\/www.rt-thread.io\/\">RT-Thread OS<\/a>, <a href=\"https:\/\/www.micrium.com\/rtos\/\">\u03bcC\/OS<\/a>, or <a href=\"https:\/\/www.highintegritysystems.com\/safertos\/\">SAFERTOS<\/a>.<\/p>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Here are also some additional resources that may be helpful!<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.freertos.org\/tutorial\/index.html\">Real Time Application Design Tutorial with FreeRTOS<\/a><\/li><li><a href=\"https:\/\/www.freertos.org\/RTOS-task-states.html\">FreeRTOS Tasks &amp; Co-Routines<\/a><\/li><li><a href=\"https:\/\/www.embeddedrelated.com\/thread\/5854\/rtos-debugging-tips-tricks-and-tools\">RTOS Debugging &#8211; Tips, Tricks and Tools<\/a><\/li><li><a href=\"https:\/\/wiki.seeedstudio.com\/Software-FreeRTOS\/\">Arduino FreeRTOS Tutorial &#8211; Seeed Wiki<\/a><\/li><\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>If you\u2019re just starting out with microcontroller units (MCUs), you may have heard of RTOS<\/p>\n","protected":false},"author":3537,"featured_media":41860,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_tribe_ticket_capacity":"0","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[3755,3757,1385,252,1756,2246,3640,3753,745,1287,1288,2982,3003],"class_list":["post-41833","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","tag-arduino-multitasking","tag-arduino-rtos","tag-freertos","tag-mbed","tag-microcontroller","tag-microcontroller-board","tag-raspberry-pi-pico","tag-real-time-operating-system","tag-real-time-embedded","tag-rt-thread","tag-rtos","tag-seeeduino-xiao","tag-wio-terminal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio<\/title>\n<meta name=\"description\" content=\"Are you new to RTOS development? Get started with RTOS basics and why they&#039;re an essential part of developing applications for your microcontrollers!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio\" \/>\n<meta property=\"og:description\" content=\"Are you new to RTOS development? Get started with RTOS basics and why they&#039;re an essential part of developing applications for your microcontrollers!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/\" \/>\n<meta property=\"og:site_name\" content=\"Latest News from Seeed Studio\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-26T02:06:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-09-29T08:20:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1493\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jonathan Tan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jonathan Tan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/\",\"name\":\"RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio\",\"isPartOf\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg\",\"datePublished\":\"2021-04-26T02:06:29+00:00\",\"dateModified\":\"2021-09-29T08:20:05+00:00\",\"author\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094\"},\"description\":\"Are you new to RTOS development? Get started with RTOS basics and why they're an essential part of developing applications for your microcontrollers!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg\",\"contentUrl\":\"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg\",\"width\":2560,\"height\":1493},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.seeedstudio.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"RTOS Basics: Getting Started with Microcontrollers\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#website\",\"url\":\"https:\/\/www.seeedstudio.com\/blog\/\",\"name\":\"Latest News from Seeed Studio\",\"description\":\"Emerging IoT, AI and Autonomous Applications on the Edge\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094\",\"name\":\"Jonathan Tan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g\",\"caption\":\"Jonathan Tan\"},\"url\":\"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio","description":"Are you new to RTOS development? Get started with RTOS basics and why they're an essential part of developing applications for your microcontrollers!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/","og_locale":"en_US","og_type":"article","og_title":"RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio","og_description":"Are you new to RTOS development? Get started with RTOS basics and why they're an essential part of developing applications for your microcontrollers!","og_url":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/","og_site_name":"Latest News from Seeed Studio","article_published_time":"2021-04-26T02:06:29+00:00","article_modified_time":"2021-09-29T08:20:05+00:00","og_image":[{"width":2560,"height":1493,"url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg","type":"image\/jpeg"}],"author":"Jonathan Tan","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jonathan Tan","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/","url":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/","name":"RTOS Basics: Getting Started with Microcontrollers - Latest News from Seeed Studio","isPartOf":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage"},"image":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage"},"thumbnailUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg","datePublished":"2021-04-26T02:06:29+00:00","dateModified":"2021-09-29T08:20:05+00:00","author":{"@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094"},"description":"Are you new to RTOS development? Get started with RTOS basics and why they're an essential part of developing applications for your microcontrollers!","breadcrumb":{"@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#primaryimage","url":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg","contentUrl":"https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg","width":2560,"height":1493},{"@type":"BreadcrumbList","@id":"https:\/\/www.seeedstudio.com\/blog\/2021\/04\/26\/rtos-basics-getting-started-with-microcontrollers\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.seeedstudio.com\/blog\/"},{"@type":"ListItem","position":2,"name":"RTOS Basics: Getting Started with Microcontrollers"}]},{"@type":"WebSite","@id":"https:\/\/www.seeedstudio.com\/blog\/#website","url":"https:\/\/www.seeedstudio.com\/blog\/","name":"Latest News from Seeed Studio","description":"Emerging IoT, AI and Autonomous Applications on the Edge","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.seeedstudio.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/61e29862da8741ee517eacd92f4cd094","name":"Jonathan Tan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.seeedstudio.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d8dd1a4a7882386e8818e110c9322897?s=96&r=g","caption":"Jonathan Tan"},"url":"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/"}]}},"modified_by":"Lily","views":36218,"featured_image_urls":{"full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg",2560,1493,false],"thumbnail":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-80x80.jpg",80,80,true],"medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-300x175.jpg",300,175,true],"medium_large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-768x448.jpg",640,373,true],"large":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1030x601.jpg",640,373,true],"1536x1536":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1536x896.jpg",1536,896,true],"2048x2048":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-2048x1195.jpg",2048,1195,true],"visody_icon":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-scaled.jpg",32,19,false],"magazine-7-slider-full":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1536x1020.jpg",1536,1020,true],"magazine-7-slider-center":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-936x897.jpg",936,897,true],"magazine-7-featured":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-1024x597.jpg",1024,597,true],"magazine-7-medium":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-720x380.jpg",720,380,true],"magazine-7-medium-square":["https:\/\/www.seeedstudio.com\/blog\/wp-content\/uploads\/2021\/03\/Week-8-2-1-675x450.jpg",675,450,true]},"author_info":{"display_name":"Jonathan Tan","author_link":"https:\/\/www.seeedstudio.com\/blog\/author\/jonathan-tan\/"},"category_info":"<a href=\"https:\/\/www.seeedstudio.com\/blog\/category\/news\/\" rel=\"category tag\">News<\/a>","tag_info":"News","comment_count":"0","_links":{"self":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41833","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/users\/3537"}],"replies":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/comments?post=41833"}],"version-history":[{"count":26,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41833\/revisions"}],"predecessor-version":[{"id":42483,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/posts\/41833\/revisions\/42483"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media\/41860"}],"wp:attachment":[{"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/media?parent=41833"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/categories?post=41833"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.seeedstudio.com\/blog\/wp-json\/wp\/v2\/tags?post=41833"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}