_lwevent_create issue

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

_lwevent_create issue

Jump to solution
1,644 Views
SortoVaritu
Contributor III

In y application i trying to create lwevent, but

_lwevent_create returns me error.

I would like to ask which parts of MQX should be installed?

Should i run _int_unexpected_isr() before lwevent creation?

0 Kudos
1 Solution
1,023 Views
Martin_
NXP Employee
NXP Employee

Check which instruction exactly has the breakpoint. Might be due to some optimization for size or something like that, that you put breakpoint on a different instruction than you would think. Alternatively, build the example with compiler optimization set to level 0 (off).

View solution in original post

0 Kudos
12 Replies
1,023 Views
Martin_
NXP Employee
NXP Employee

Do you have #define MQX_USE_LWEVENTS 1 in your user configuration ? (user_config.h).

Some BSPs may have this MQX component disabled by default.

1,023 Views
SortoVaritu
Contributor III

Im using K60N512 and user_config.h do not has such parameter but include

/* use the rest of defaults from small-RAM-device profile */

#include "small_ram_config.h"

maximum_config.h and smallest_config.h contain such parameter

maximum_config.h contain

/*

** When MQX_USE_LWEVENTS is defined as 1,

** then mqx will compile in the support code for light weight event component.

*/

#ifndef MQX_USE_LWEVENTS

#define MQX_USE_LWEVENTS 1

#endif

smallest_config.h contain

/*

** When MQX_USE_LWEVENTS is defined as 1,

** then mqx will compile in the support code for light weight event component.

*/

#ifndef MQX_USE_LWEVENTS

#define MQX_USE_LWEVENTS 0

#endif




0 Kudos
1,023 Views
Martin_
NXP Employee
NXP Employee

you can add a line

#define MQX_USE_LWEVENTS 1

to your user_config.h

I just tried our standard lwevent example c:\Freescale\Freescale MQX 3.8\mqx\examples\lwevent\lwevent.c on TWR-K60N512 and it works for me.

what is the error code returned by _lwevent_create() ?

0 Kudos
1,023 Views
SortoVaritu
Contributor III

Creation is OK.

_lwevent_wait_ticks return error.

Event task:

void evnttask( uint_32 temp)

{

    result = _lwevent_test(&error_ptr, &error2_ptr);

    if (result != MQX_OK){

    printf("\nFailed _lwevent_test: 0x%X.", result);}

    if (_lwevent_create(&lwevent1,0) != MQX_OK) {

          printf("\nMake event failed");

       }

   

       while (1) {

          if (_lwevent_wait_ticks(&lwevent1,1,TRUE,0) != MQX_OK) {

             printf("\nEvent Wait failed");

          }else

              printf("\nEvent\n");

          if (_lwevent_clear(&lwevent1,0x01) != MQX_OK) {

             printf("\nEvent Clear failed");

          }

          printf(" Tick \n");

       }

}


0 Kudos
1,023 Views
Martin_
NXP Employee
NXP Employee

OK, what is the error code returned by _lwevent_wait_ticks ?

0 Kudos
1,023 Views
SortoVaritu
Contributor III

Everything works correct. This is just debugger bug.

Thanks!

0 Kudos
1,023 Views
Martin_
NXP Employee
NXP Employee

Perfect !

Just would like to add MQX_OK is defined as zero (0). So if a function returns 0 it actually means MQX_OK.

c:\Freescale\Freescale MQX 3.8\mqx\source\include\mqx.h

0 Kudos
1,023 Views
SortoVaritu
Contributor III

Yes. But i have set breakpoint on this row

printf("\nEvent Wait failed");

And debugger stopped on this row, but _lwevent_wait_ticks(&lwevent,1,TRUE,0) returned 0.

0 Kudos
1,024 Views
Martin_
NXP Employee
NXP Employee

Check which instruction exactly has the breakpoint. Might be due to some optimization for size or something like that, that you put breakpoint on a different instruction than you would think. Alternatively, build the example with compiler optimization set to level 0 (off).

0 Kudos
1,023 Views
SortoVaritu
Contributor III

OK. I will try that.

Thanks.

0 Kudos
1,023 Views
SortoVaritu
Contributor III

_lwevent_wait_ticks returns 0.

I have tried to start lwevent example from MQX package and faced with the same problem.

In demo application after task and lwevent creation service_task start the next code:

if (_lwevent_wait_ticks(&lwevent,1,TRUE,0) != MQX_OK) {
printf("\nEvent Wait failed");
_task_block();
}

and i can see by debugger that _lwevent_wait_ticks(&lwevent,1,TRUE,0) returns 0 and pass this step and goes to

printf(" Tick \n");

But simulated_ISR_task did not set _lwevent_set(&lwevent,0x01) yet.

After that task returns to this step - if (_lwevent_wait_ticks(&lwevent,1,TRUE,0)) and hangs.

simulated_ISR_task works normally and every 200 ticks set event bit (_lwevent_set(&lwevent,0x01)), but service_task cant pass _lwevent_wait_ticks(&lwevent,1,TRUE,0) and hangs.

I set breakpoint on this row

printf(" Tick \n"); and can see that this row performs only once after simulated_ISR_task creation.

Message was edited by: Rozberg Dmitry

0 Kudos
1,023 Views
SortoVaritu
Contributor III

I found in mqx_cnfg.h the next part:

Comments:

*

*   This file contains the default configuration definitions for configuring

*   the various optional features of MQX. Individual config. Defines can be

*   overridden in the "user_config.h" file.

*

*   By default, MQX is configured as follows:

*    MQX_ALLOW_TYPED_MEMORY               1

*    MQX_COMPONENT_DESTRUCTION            1

*    MQX_DEFAULT_TIME_SLICE_IN_TICKS      0

*    MQX_EXIT_ENABLED                     1

*    MQX_EXTRA_TASK_STACK_ENABLE          1

*    MQX_HAS_TIME_SLICE                   1

*    MQX_CHECK_ERRORS                     1

*    MQX_CHECK_MEMORY_ALLOCATION_ERRORS   1

*    MQX_CHECK_VALIDITY                   1

*    MQX_INCLUDE_FLOATING_POINT_IO        0

*    MQX_IS_MULTI_PROCESSOR               1

*    MQX_KERNEL_LOGGING                   1

*    MQX_LWLOG_TIME_STAMP_IN_TICKS        1

*    MQX_MEMORY_FREE_LIST_SORTED          1

*    MQX_MONITOR_STACK                    1

*    MQX_MUTEX_HAS_POLLING                1

*    MQX_PROFILING_ENABLE                 0

*    MQX_ROM_VECTORS                      0

*    MQX_RUN_TIME_ERR_CHECK_ENABLE        0

*    MQX_TASK_CREATION_BLOCKS             1

*    MQX_TASK_DESTRUCTION                 1

*    MQX_TIMER_USES_TICKS_ONLY            0

*    MQX_USE_32BIT_MESSAGE_QIDS           0

*    MQX_USE_32BIT_TYPES                  0

*    MQX_USE_EVENTS                       1

*    MQX_USE_IDLE_TASK                    1

*    MQX_USE_INLINE_MACROS                1

*    MQX_USE_IPC                          1

*    MQX_USE_LOGS                         1

*    MQX_USE_LWEVENTS                     1

*    MQX_USE_LWLOGS                       1

*    MQX_USE_LWMEM                        1

*    MQX_USE_LWMEM_ALLOCATOR              0

*    MQX_USE_LWMSGQ                       1

*    MQX_USE_LWTIMER                      1

*    MQX_USE_MESSAGES                     1

*    MQX_USE_MUTEXES                      1

*    MQX_USE_NAME                         1

*    MQX_USE_PARTITIONS                   1

*    MQX_USE_SEMAPHORES                   1

*    MQX_USE_SW_WATCHDOGS                 1

*    MQX_USE_TIMER                        1

*    MQX_VERIFY_KERNEL_DATA               1

*    MQX_ENABLE_USER_MODE                 0

*    MQX_ENABLE_LOW_POWER                 0

*

*END************************************************************************/

So, i think lwevents are enabled.

Iam trying to implement event in security_telnet example.

Later i will write _lwevent_create() error code.

0 Kudos