rtos | A cobbled together RTOS for ARM microcontrollers
kandi X-RAY | rtos Summary
kandi X-RAY | rtos Summary
A cobbled together RTOS for ARM microcontrollers
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of rtos
rtos Key Features
rtos Examples and Code Snippets
Community Discussions
Trending Discussions on rtos
QUESTION
I am new to embedded C, and I recently watched some videos about volatile qualifier. They all mention about the same things. The scenarios for the use of a volatile qualifier :
- when reading or writing a variable in ISR (interrupt service routine)
- RTOS application or multi thread (which is not my case)
- memory mapped IO (which is also not my case)
My question is that my code does not stuck in the whiletest();
function below
when my UART receives data and then triggers the void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
interrupt function
ANSWER
Answered 2021-Jun-13 at 16:12volatile
informs the compiler that object is side effects prone. It means that it can be changed by something which is not in the program execution path.
As you never call the interrupt routine directly compiler assumes that the test
variable will never be 1
. You need to tell him (volatile
does it) that it may change anyway.
example:
QUESTION
ANSWER
Answered 2021-Jun-04 at 00:58Solved. The solution was to generate new rsa and dsa keys with:
QUESTION
I'm studying the FreeRTOS scheduler (port.c) and have a question about Systick handler. I understand xPortSysTickHandler()
is supposed to be called at RTOS ticks, but I don't see where it gets specified by saying xPortSysTickHandler()
is the Systick timer interrupt callback function.
Especially, I didn't see that in vPortSetupTimerInterrupt()
, which seems a bit strange to me since this function does configure, such as load register value, of the timer.
Does it gets specified as the callback somewhere else? Or is there something I'm missing?
Thanks!
...ANSWER
Answered 2021-May-24 at 18:19It is installed directly into the interrupt vector table. If the vector table uses CMSIS names for the handlers then you can map the CMSIS name to the name of the FreeRTOS systick handler in FreeRTOSConfig.h, as per the FAQ - see the red "special note to ARM Cortex-M users" here: https://www.freertos.org/FAQHelp.html
QUESTION
I work on project where I use FreeRTOS tasks and I would like to go into deep_sleep. Is there anything that I should do before going into the deep_sleep ? Or after wake up, RTOS scheduler works as nothing happen ?
...ANSWER
Answered 2021-May-10 at 15:07There's no easy way to mix freeRTOS and deep_sleep mode. During deep sleep the CPU is powered down and its context is lost, yet the RTC memory can be retained. As all SRAM's content is lost, there's no easy backup-restore we can do here to safely restore everything after coming out from deep sleep.
But what you can do is to bring everything down to a safe state before entering deep-sleep, you can signal all your tasks to finish what they're doing and exit, and then take some advantage of ESP32's relatively low wake-up latency. It is a very unpleasant inconvenient for a Wi-Fi connected device, but more or less acceptable for BLE devices that will wake up and send a beacon once in a few seconds.
You would also want to fine-tune the second stage bootloader's configuration by enabling the CONFIG_BOOTLOADER_SKIP_VALIDATE_IN_DEEP_SLEEP option so waking-up from deep-sleep would be faster than booting from a cold reset.
QUESTION
Having just recently gotten into embedded programming using PIC microcontrollers, I am trying to understand the difference between Bare metal, RTOS and SoC.
Online searches reveal contradictory definitions and meanings.
For example, Semiengineering state that "An RTOS is code written on bare metal" and arduino.cc state that "If you programming controller without using any [RT]OS it's a bare metal approach".
The implication is that some code written on bare metal can be considered to be RTOS, whilst others may not be.
Therefore, my question is when can embedded programming of microntroollers be considered programming of bare metal and/or RTOS? And where does SoC fit into all of this, if at all?
Any insight that anyone can provide will be very much appreciated!
...ANSWER
Answered 2021-May-07 at 00:19(1) An RTOS is a Real Time Operating System. Implementing an operating system is not the same thing as using an operating system. It seems like you'd know whether you're programming using a Real Time Operating System or nothing. And that's the difference between using a RTOS and bare metal.
Note that the RTOS code is bare-metal programming, because it's not using any lower-level software. And then when you write your code using the RTOS, it's not bare-metal programming, because you're using the services of the RTOS.
(2) It seems like you'd know whether you're implementing an operating system or an embedded application And that's the other difference.
(3) As regards an SoC - that's a hardware category. Is there one integrated circuit containing the CPU and a bunch of associated functions (interrupt controller, maybe an MMU, peripheral interfaces, network, etc.)? Then it may be a SoC. Or are there a few other ICs providing these functions? Then it's not a SoC.
QUESTION
I am working on a C project for the university where a CoAP server is to be hosted on a TM4C129EXL. It is particularly important to choose a FreeRTOS operating system. Unfortunately, I had to learn that Texas Instruments has stopped supporting FreeRTOS. There are no options for me to switch to another operating system. It is for this reason that I turn to you.
I'm looking for a sample program in which Free RTOS is executed on a TM4C129EXL board. In the best case, I would be happy about a Code Composer Studio Project, as this is the IDE we work with from the university.
If you do not have any sample code available, I would be happy to receive any other information regarding FreeRTOS and CoAP of course with reference to the TM4C129EXL.
...ANSWER
Answered 2021-Apr-30 at 14:14You did not specify if you had any requirements in terms of FreeRTOS
version, but you can either:
- use the demo provided in file
SW-EK-TM4C1294XL-2.1.4.178.exe
available on TI WEB site as is - you will find it in directoryexamples\boards\ek-tm4c1294xl-boostxl-senshub\senshub_iot
- use this example as a basis to use a more recent version of FreeRTOS: you just would have to replace FreeRTOS source code by the most recent one, and maybe to modify some code in the demo: some function names/signatures may have changed across major versions.
The procedure hereafter describes step by step how to create a minimalist FreeRTOS program with Code Composer Studio 10.3.0 and FreeRTOS v202104.00 in a Windows 10 environment using the second approach. You may have to adjust the drive letter to you specific setup, I am using D
: for the purpose of this example..
Download Code Composer Studio 10.3.0, FreeRTOS v202104.00 and SW-EK-TM4C1294XL-2.1.4.178.exe.
Install Code Composer Studio with support for the
Tiva-C
MCU familly. When prompted for a workspace name, specifyD:\ti\workspace_v10
.Unzip
FreeRTOSv202104.00.zip
intoD:\
.Unzip
SW-EK-TM4C1294XL-2.1.4.178.exe
intoD:\SW-EK-TM4C1294XL-2.1.4.178
.Launch CCS
Use the menu item
File/New/CCS Project
, and create an 'Empty Project (with main.c).
[]
- Click on the
Finish
button. - Create the following directories:
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\driverlib
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\inc
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\include
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\portable\GCC
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\portable\GCC\ARM_CM4F
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\portable\MemMang
- Copy
D:\SW-EK-TM4C1294XL-2.1.4.178\examples\boards\ek-tm4c1294xl-boostxl-senshub\senshub_iot\FreeRTOSConfig.h
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS
- Copy all
.h
files fromD:\SW-EK-TM4C1294XL-2.1.4.178\driverlib
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\driverlib
. - Copy
D:\SW-EK-TM4C1294XL-2.1.4.178\driverlib\gcc\libdriver.a
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\driverlib
. - Copy all
.h
files fromD:\SW-EK-TM4C1294XL-2.1.4.178\inc
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\inc
. - Copy all files present in
D:\FreeRTOSv202104.00\FreeRTOS\Source\include
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\include
. - Copy all
.c
files present inD:\FreeRTOSv202104.00\FreeRTOS\Source
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel
. - Copy all file present in
D:\FreeRTOSv202104.00\FreeRTOS\Source\portable\GCC\ARM_CM4F
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\portable\GCC\ARM_CM4F
- Copy
D:\FreeRTOSv202104.00\FreeRTOS\Source\portable\MemMang\heap_4.c
intoD:\ti\workspace_v10\TM4C129EXL-FreeRTOS\FreeRTOS-Kernel\portable\MemMang
. - Edit
D:\ti\workspace_v10\TM4C129EXL-FreeRTOS\main.c
, and replace its content by:
QUESTION
I'm doing some development using Mbed Studio and after linking I see this sort of output:
...ANSWER
Answered 2021-Apr-27 at 23:13Could it be the change in size from the last link?
Yes.
QUESTION
In bellow example why we should use int32_t instead of uint32_t ? (platform is ARM 32 bit microcontroller)
...ANSWER
Answered 2021-Apr-21 at 14:21There is no particular reason that you should use pointer to signed rather than unsigned.
You are probably never going to dereference this pointer directly to access the words on the stack. If you do want to access the data on the stack, some of it will be signed, some unsigned, and some neither (strings etc) so the pointer type will not help you with that.
When you want to pass around a pointer but never dereference it then one convention is to use a pointer to void, but that convention isn't so popular in embedded system code.
One reason to use a pointer to a 32-bit integer is to suggest that the pointer is at least word-aligned. If you intend on complying with the ARM EABI (which you should) then the stack should be doubleword (64-bit) aligned at the entry to every EABI compliant function. To hint that that is the case you might want to even use a (u)int64_t pointer. This might be misleading though because not everything on the stack is 64-bit or 32-bit aligned, just the whole frames.
QUESTION
I have a question about Windows batch. I have two batch files/scripts, the first one calls the second one, several times with different parameters.
I want to create several environment variables in the first one and pass them as parameters to the second one. In this second batch script the passed variables should be increased each by a value determined in the second batch file. Then the environment variables in first batch file are passed again on the next call of the second batch file and their values should be incremented once again accordingly by the second batch file.
First .bat script:
...ANSWER
Answered 2021-Apr-10 at 21:41Here is the full first batch file rewritten:
QUESTION
I am struggling (like many others it seems) to get started with LwIP over PPPos (ppp over serial) for STM32. I could have ended that sentence earlier, because even without PPPos I am having a hard time understanding where to start.
I have read, and read, and read. Their official home page, wiki, tons of forums, and trying to digest github examples for other platforms. But still I am having a hard time to have a clue where to start.
There seem to be little (none?) examples on this online taking me through the whole process. And I really don't get it. The IoT world is exploding. So I really thought it would be "easy" to have some hello world example.
What I have at the moment:
- An LTE modem which I can use via AT commands
- A small application which runs on my nucleo (F446ze) board which can blink LEDs, communicate over UART3 with my PC, and UART2 with the LTE modem
- Played around with free RTOS, that part was surprisingly easy to familiarize
But instead of clumsy internet communication using AT commands (and AT+CMQTT commands) I want to rely on a proper TCP/IP stack. Set the LTE modem in data mode (PPP), and have LwIP take over the TCP/IP stack.
Is this still very complicated anno 2021? Or am I completely looking in the wrong direction? Is there anybody who can point me in the right direction?
I already have freertos working too. I don't mind to use it. I also don't mind to go without. I am just looking for a way to get started with LwIP without having to reverse engineer the LwIP stack completely.
...ANSWER
Answered 2021-Apr-11 at 21:34Going top-to-bottom, you have your application code which in the end will likely want to talk to some server: resolve DNS name, open a tcp connection etc. This is what LwIP provides - a set of API functions: socket functions, DNS functions and other. For example, when you do a TCP socket connect
to a given IP address and port, it decides which out of available network interfaces to use, constructs a frame in form of array of bytes and sends those bytes over that interface. This is where LwIP part ends - it requesting given network interface to output X bytes it provides, as well as consuming any bytes that may arrive on that interface. It doesn't know how exactly to make the bytes "come out", but it knows how to construct the data to send and understands the data you give it.
Going bottom-to-top, you have your modem - LTE, 3G, 2G, doesn't really matter. Modems provide a set of AT commands to talk to them to perform a set of functions: set SIM card PIN, get signal quality, list available operators, select an operator etc., as well as a way to switch it to PPP mode, which also done ATD
command. Assuming the modem has been configured properly before, once you switch it to PPP mode it'll be able to send data using PPP protocol and will also "spit out" any data it receives. This is where the modem part ends - when switched to PPP mode, the modem is able to send and receive raw network traffic using PPP protocol. It knows how to output the raw bytes you give it, but it doesn't understand them on a very high level.
Your role is to connect (interface) both parts. Your modem uses PPP to produce and consume network traffic. LwIP has the capability to understand and produce PPP frames.
In case of sending data out, after preparing a PPP frame LwIP is going to call the sio_write
function that is expected to send provided bytes to modem that's already in PPP mode. This is the part that you need to fill in. In case of reads sio_read
is used and it's your job to fill it in so that it returns bytes that were received from the modem. How you're going to do that - using RTOS and queues for bytes, no RTOS or any other way - doesn't matter. It's what you find more convenient or what fits your overall project structure better. As long as those functions do what they're supposed to, LwIP will be happy to use them.
This interfacing is discussed in more detail here: https://lwip.fandom.com/wiki/PPP#PPP_over_serial. Again, the general concept is that LwIP is just a software library and in the end it'll want to send and receive bytes. Your job is enabling it to do so, by filling in the functions it expects.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install rtos
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page