FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [June 2014 Threads] Trace macro failing to be called (not compiled)Posted by erupter on June 4, 2014 I have a basic project running, but tasks are not doing what I want so I would like to use the traceTASKSWITCHEDIN/OUT macros to output something to a logic analyzer.
So here is my code
void setLogOutput (unsigned long c)
{
int a;
if (c == 0)
a = 0;
}
#define traceTASK_SWITCHED_IN() setLogOutput(pxCurrentTCB->uxTaskNumber)
#define traceTASK_SWITCHED_OUT() setLogOutput(0)
#include "FreeRTOS.h"
Obviously setLogOutput doesn't do anything right now, and I know it.
But the point is that neighter SWITCHEDIN nor SWITCHEDOUT are ever called or compiled.
Breakpoints in tasks.c are broken.
I cannot understand what I am doing wrong, could anybody please help me?
Trace macro failing to be called (not compiled)Posted by rtel on June 4, 2014 Where have you defined the macros?
The easiest place to put them, to get the correct include order, is at the bottom of FreeRTOSConfig.h.
Regards.
Trace macro failing to be called (not compiled)Posted by heinbali01 on June 4, 2014 Hi,
You could try:
~~~~~~
volatile unsigned int dummy;
void setLogOutput (unsigned long c)
{
dummy++;
}
~~~~~~
It is possible that optimiser ignores the code, because it does nothing.
GCC is very clever with this: it sees when a variable is only used in the left-hand size of expressions, and in that case it will never be implemented. 'volatile' might help or better: print the variable somewhere.
Regards.
Trace macro failing to be called (not compiled)Posted by jdurand on June 4, 2014 I've been seeing GCC get more and more clever about working around my
ways to keep variables/code from being deleted. There was a time when
global variables were safe, but not now.
I've tried debugging with no optimization, but that just blows the code
up where it doesn't fit. I now run with -Og which seems to be a
reasonable compromise most of the time.
On 06/04/2014 09:56 AM, Hein Tibosch wrote:
> GCC is very clever with this: it sees when a variable is only used in
> the left-hand size of expressions, and in that case it will never be
> implemented. 'volatile' might help or better: print the variable
> somewhere.
Jerry Durand, Durand Interstellar, Inc. www.interstellar.com
tel: +1 408 356-3886, USA toll free: 1 866 356-3886
Skype: jerrydurand
Trace macro failing to be called (not compiled)Posted by heinbali01 on June 4, 2014 Yes indeed, gcc also makes global variables disappear, even if they appear in several modules (as LHS only).
~~~~~~
const char ipmarker[32] = "dEfAuLtIp192.168.2.116";
void somefunction()
{
asm ("" : : "r" (ipmarker) : "cc");
}
~~~~~~
This trick worked to get a const string included in the code without ever actually reading it. Note that some_function() must be called
Trace macro failing to be called (not compiled)Posted by erupter on June 10, 2014 Sorry I thought I answered this but evidently I didn't.
Putting the macro at the end of FreeRTOSConfig.h solved my problem.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.
|