Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




Loading

learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 9, 2017

Hi, could use help in making my pic24 and microstickii 232 com. I have followed the manual for FreeRTOS and the EX16 BOARD. I have been able to get my micrstickii with p24fj64gb002 working with the single led showing my scheduler working with simple delays. I would like to be able to use the demo programs in the manual with the ability for vPrintSprint() to give the needed feed back which helps affirm I have the understanding of the exercises. I can see how great FreeRTOS will be when i can understand it better, very fun. If anyone can give me a few pointers it would be greatly appreciated. Thank You very much, Lenj


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 9, 2017

thats vPrintString() oops


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 9, 2017

vPrintString() just outputs text. What is available on your hardware for text output? For example, is there a UART, or a USB CDC (virtual COM port) port, or something else?


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 9, 2017

I have UART1. In the EX16 demo UART2 is used with the predefined pins connected to U2RX and U2TX. I added in the user init() my remapped pins UIRX pin RB10(RP10), and U1TX pin RB11(RP11) and also added the U1MODE and U1STA regs to try to get the com running. I believe that the regs should be under control of the FreeRTOS but i thought maybe this would work. Thank You so much for replying. I donated to SourceForge once for RealTerm but as I get my training moving forward on FreeRTOS I'll donate again for this wonderful tool. Len


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 9, 2017

FreeRTOS won't know about those registers or your hardware, so as long as you can get characters out of the port you have available you can implement vPrintString() to use that port.

You need to be careful about thread safety though. The simple thing to do would be to lock the scheduler while the UART was being used, so only one task can use the UART at a time - however if you are using a low baud rate that simple technique might not be practical because of the transmit time - in which case you could add strings to a circular buffer and transmit the strings asynchronously using an interrupt. That way a critical section can be used just to cover the time taken to copy the strings into the circular buffer.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 13, 2017

Thank you very much for your reply. I have tried to recieve from the rtos but i must be missing something. In the my init hardware function I put the details for my microstickii hook up(remap ports and U1MODE , U1STA, BRG) which values I have used with just the chip and my com worked fine. The last command for the UART1 is to enable it. Am I doing this right in the init() for hardware setup? I was able to setup my TRIS and PORT reg there to use the led flash scheduler delay functions. It seems like the UART1 may not be chosen by the FreeRTOS. I went through the serial.c file for the EX16 board and changed all the UART2 reg values to UART1 which would get the FreeRTOS looking at the UART1. Is there any other file that would effect which UART is being used? Again your help is very much appreciated, Len


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 13, 2017

Forget the RTOS at the moment. It has no knowledge of the UART.

From your post it sounds like the UART is working when you have an application that is not using the UART. Can you confirm that? So you have something like this pseudo code:

main() { inituart(); for( ;; ) { sendcharactertouart( "a" ); } }

...and the characters can be seen to be output.

If so, then do example the same but in an RTOS task:

main() { init_uart();

 xTaskCreate( my_uart_task, ...... );
 vTaskStartScheduler();

}

void myuarttask( void *pvParameters ) { for( ;; ) { sendcharacterto_uart( "a" ); } }

is the character still being transmitted?


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 13, 2017

Correction:

From your post it sounds like the UART is working when you have an application that is not using the UART

Should read "...not using the RTOS".


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 15, 2017

Okay, I first did a complete config for my chip in its own configpic24() Which I added its prototype on the top of the demo. I defined it below the main(). I did your suggested sendcharacterto_uart("a") but i don't have its definition so it would not compile. So i did

char *testuart; //declared pointer testuart = "testing nown"; \ assigned string literal to pointer for( ; ; ) { printf(testuart); \use printf to print string pointed to }

It printed fine. Did as you said and xTaskCreate(myuartask, ....) with for loop and printed fine. Where is the sendcharacterto_uart defined? I have the vPrintString() defined so should also work.

How much hardware config does the FreeRTOS have and how do I modify it to meet my microstickii needs? I maybe wrong but i thought most of the config was in the FreeRTOS.

I was lead to your FreeRTOS by going to the Microchip website. I also downloaded the Visual Studio IDE to help my training in FreeRTOS but am confused how to use it with your examples in the book. I get the files opened in the editor but it I dont find how to run the GCC compiler and then if it compiles how to run the example. Is this a function of te command prompt? What would you suggest i read as a little above novice programer to start working your examples.

REALLY GOING TO HAVE FUN with FreeRTOS. I will have questions I know but now I can follow your book examples better. Thank you so much for your help. Len


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 15, 2017

the main(). I did your suggested sendcharacterto_uart("a") but i don't have its definition so it would not compile. So i did

It is pseudo code, intended to describe what I'm suggesting you do. It is not a function that actually exists.

char *testuart; //declared pointer testuart = "testing nown"; assigned string literal to pointer for( ; ; ) { printf(testuart); use printf to print string pointed to }

It printed fine. Did as you said and xTaskCreate(myuartask, ....) with for loop and printed fine.

So the characters are being output from your UART both with and without the RTOS running?

You need to be careful with how printf() is implemented. Some implementations are very stack hungry, can bring in all floating point libraries bloating your code massively, and are almost never thread safe. For something as simple as sending fixed strings it is best to write to the UART directly (send characters to the UART regsiters directly) rather than indirectly using printf.

Where is the sendcharacterto_uart defined?

As above, it doesn't exist, which is why I said it was pseudo code, so you wouldn't think it did exist.

I have the vPrintString() defined so should also work.

Going back to the start of this thread. You have to provide an implementation of vPrintString() that works for your application. Now you have characters being output from the UART you can go ahead and implement vPrintString() to call your printf() function ... >>>>BUT<<<< note all the other advice in this thread such as it is better NOT to use printf() but write to the UART directly, copy other implementations of vPrintString() to ensure it is FAST AND THREAD SAFE, etc.

How much hardware config does the FreeRTOS have and how do I modify it to meet my microstickii needs?

Please read and re-read this thread and take note of what is being said, all I can do is keep repeating myself. FreeRTOS does nothing with the peripherals on your hardware other than the clock used to generate the tick interrupt.

I maybe wrong but i thought most of the > config was in the FreeRTOS.

Yep, you were wrong, it has been mentioned once or twice ;o)


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 15, 2017

Thank you for your reply. Yes both with FreeRTOS and without I get my output. Ill study on to write directly to the uart regs and modify how i send and receive. Being a training programer some of my questions may seem simplistic in nature to you and forgive me for that but everyone goes through these steps I believe. One more question, setting my uart BRG with my Fcy of 16Mz @ 19200 gave me BRG = 51. This works fine the terminal prints. So my chip is producing 16Mz. When I use a vTaskDelay() or vTaskDelayUntil() utilizing the pdMSTOTICKS() I find my delays are way off. The tick interrupt period should be 1ms . How do I confirm this and if it is not correct how would i correct it? Thanks again for your time. Len


learning freertos using pic24 and microsticii 232 comm

Posted by tlafleur on January 15, 2017

You may want to look here for more info on serial ports for dsPic and PIC24

https://interactive.freertos.org/hc/en-us/community/posts/210026586-dsPIC-PIC24-two-port-serial-drivers

https://interactive.freertos.org/hc/en-us/community/topics/200480206-Microchip

tom lafleur

Attachments

alternate (2686 bytes)

learning freertos using pic24 and microsticii 232 comm

Posted by tlafleur on January 15, 2017

A few more thing...

Use a scope or logic analyzer to check tick time... Toggle a pin in the tick interrupt loop and look at it... On baud rate, most UART can tolerate +-10% clock without an issue... Look at the datasheet for the part your using, read the section on UART, lots of info there on baud rate. ​FreeRTOS run very well on dsPIC33 and PIC24 without the ​EDS memory, and works well with it if you careful on using it.

https://interactive.freertos.org/hc/en-us/community/posts/210026846-FreeRTOS-V8-2-0-port-for-ALL-16-bit-PICs-with-hardware-stack-checking-SPLIM-


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 15, 2017

Hi, I tested my interrupt tick time by not using my pdMSTOTICKS() but inserted just 1000 for the ticks, 1 second, it works. Right now I have my vTaskDelayUntil() going with the 2nd pram pdMSTOTICKS(100000 * 15) and I have roughly 1 second delay. With the vTaskDelay() same pram same 1 second. When downloading the drivers only the dspPIC serialdrivers opened, the other 2 my zip could not open them. Thank you ver much, Len


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 16, 2017

Found that projdefs.h was not in demo delays works fine now.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 19, 2017

Hi again, Finding my way through the book. Wonderfully written and now that i downloaded the ref man, again wonderfully written, I can answer most of my questions. I am studying interrupt semaphores exam 16 but can't find sema.h file. I can find the individual files but when i look for the sema.h file in the includes for my port it is not listed. Is that because my port does not need it? Thanks for attending to these simple questions of mine. Thank You for your time, Len


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 19, 2017

The file is called semphr.h and its in FreeRTOS/source/include (in the main download at least).


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 20, 2017

Thanks, found it.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 20, 2017

Hi again, looking for yield from ISR but only found portYIELD(). Is this ISR safe for my port? Thanks


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 20, 2017

From the following page: http://www.freertos.org/portpic24_dspic.html

"Interrupt service routines that cannot cause a context switch have no special requirements and can be written as per the compiler documentation.

Interrupt service routines that can cause a context switch must execute with priority portKERNELINTERRUPTPRIORITY, and only call taskYIELD() at the very end of the service routine after the interrupt source has been cleared. See the file serial.c included in the demo application for an example."

taskYIELD() and portYIELD() being the same thing - one calls the other. So the call needs to be at the very end of the ISR. The main FreeRTOS download contains example ISRs that you can use as a reference.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 20, 2017

Thank you, Is configKERNELINTERRUPTPRIORITY0x01 the same, I seem not to be able to find portKERNELINTERRUPTPRIORITY.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 20, 2017

Is there a macro in the portmacro.h for this?


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 20, 2017

You have the file, open it up and have a look.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 23, 2017

Looked but not there. I assume it is used for the interrupts for my port. I was able to get example 16 working good using a 32bit timer and setting the IP to configKernalPriority +1. Iam still using vPrintString() until i grasp how to use the serial driver. Works okay for now. When i try to use the daemon task though the interrupt timing was good but the use of the vPrintString() comes up not right probably due to the use of the print functions. Now I am on example 18 using the daemon task again but now in my ISR for TMR3 Interrupt the xTimerPendFunctionCallFromISR() is used, errors seems to tell me to add the MPU_wrappers.h and .c files. They must be used for my Chip. I add them which makes most of the errors go away but I am left with the xPortRaisePrivilege(). I try to find the definition must be looking in the wrong area the portable.h does not have it. Your help is greatly appreciated. Len


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 23, 2017

I found my mistake, I was unaware of the need to configTimerPend FunctionCallFromISR() in FreeRTOSConfig.h. Working fine. Does portYIELD() use xHigherPriorityTaskWoken? Thanks


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 23, 2017

Does portYIELD() use xHigherPriorityTaskWoken? Thanks

Not that I recall. The PIC24 port is older and I think you have to test xHigherPriorityTaskWoken manually before calling portYIELD(). Refer to the examples in the main FreeRTOS download.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 23, 2017

Going on to Example 19. Trying to use Queues with ISR put in the example and git alot of compiler warnings dealing with stdio.h files. They seem to deal with yvals.h . My stdio.h are lega-c includes from microchip. Havnt ever delt with these. Most be something dealing with the book example and my chip. Any suggestions would be greatful to understand this. Len


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 23, 2017

Are you use the C files from the examples for the Win32 code (from the Mastering the FreeRTOS Real Time Kernel book, rather than the "Using the ..." book)?

I'm not sure why there would be any difference with how stdio was used in example 16 compared to others. I just looked at the file and it doesn't seem to be used at all.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 23, 2017

I think it is used in the vPrintString() call where printf() is called.


learning freertos using pic24 and microsticii 232 comm

Posted by rtel on January 23, 2017

Why is that different for that particular example though? I think the print string function should be the same for all the examples. Or is that example also printing out a number, in addition to the string?


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 26, 2017

My reply just got errased. I'll start again. Found my problem and now able to get exampe 19 to compile. Would not run. I found that by commenting out the vStringPrinter task it would run. Looking into the while loop in the vStringPrinter the xQueuReceive task seems not to see the xStringQueue to have anything in it. I moved my attention to the ISR and put in a vPrintString(pcStrings[ulReceivedNumber] after theXQueueSendToBackFromISR() and ran it keeping the vStringPointer task commented out, gave me the strings printed as it should be. I must have something not quite right with my xQueueSendToBackFromISR() or theQueueReceive() did not receive from the ISR. Any thoughts? Thank you for your patience. Also I have been studying the serial.c and serial.h and would like to try and use them in a test example maybe just an echo program. Does any of the other ports have something simple for me to work with. Well again Thank you . Len


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 26, 2017

correction that's the for loop in the vStringPrinter task which i beleive is where the program stalls.


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 26, 2017

After looking further my led is blinking the interrupt but my vStringPrinter stops all my messages. Moving on to understanding the serial .h and .c files for example teh xSerialGetChar(xComportHandle pxPort, signed char pcRxedChar, TickType_t xBlockTime) :: looking at the xComportHandle pxPort variable xComportHandle is typdef void *xComPortHandle this means to me that the varable pxPort now is typedef something to type void . So when I go to call this function instead if the placeholder xComportHandle xPort I would define a variable like xPort MYUART1; then MYUART1 is of type xComPortHandle which is a pointer to void my MYUART1 can be the return of lets say xSerialPortInitMinimal(). With all the casting and typedef it can be quite intense for my level right now is there any guidance to help move me forward. All in all enjoying my learning and looking forward to knowing this program better, Len


learning freertos using pic24 and microsticii 232 comm

Posted by gatolen on January 28, 2017

I guess I most have lost you somewhere. If you do not want to help me get by this just let me know, Len


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists