Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CF2 freezes randomly when I2C code is not in the highest priority task #69

Closed
tobbeanton opened this issue Sep 15, 2015 · 2 comments
Closed
Labels
Milestone

Comments

@tobbeanton
Copy link
Member

As of the 2015.08 release the Crazyflie 2.0 sometimes freezes randomly.

@tobbeanton tobbeanton added the bug label Sep 15, 2015
@krichardsson
Copy link
Contributor

Warning! If it freezes during flight, the current thrust of the motors will be maintained and the crazyflie will not be possible to control.

ataffanel added a commit that referenced this issue Sep 28, 2015
This reverts commit c3f66f0.

This causes freeze related to i2c. See bug #69.
ataffanel added a commit to bitcraze/crazyflie2-nrf-firmware that referenced this issue Sep 28, 2015
@ataffanel
Copy link
Member

The bug is confirmed to come from the I2C implementation. Reverted a commit that affected the tasks priorities and made this bug apparent.

We still need to fix the underlying I2C implementation.

@ataffanel ataffanel changed the title CF2 freezes randomly CF2 freezes randomly when I2C code is not in the highest priority task Sep 28, 2015
ataffanel added a commit that referenced this issue Sep 30, 2015
krichardsson added a commit that referenced this issue Oct 26, 2015
krichardsson added a commit that referenced this issue Oct 27, 2015
…his will reduce the risk of corrupting code that is normally not built during refactoring.
krichardsson added a commit that referenced this issue Oct 29, 2015
Moved duplicated code into functions to make it more DRY
krichardsson added a commit that referenced this issue Oct 29, 2015
The semaphore has previously not been released in the error callback. After an error condition the semaphore could be taken and the next call to ic2 read/write would lock the calling task.
Also added a timeout callback, and release the semaphore there as well.
krichardsson added a commit that referenced this issue Oct 31, 2015
Added possibility to monitor queues in runtime. To use the functionality, define DEBUG_QUEUE_MONITOR.
Queues of interest must be added to the queue monitor with the DEBUG_QUEUE_MONITOR_REGISTER macro.

The following data is recorded and output to the console every 10 seconds:
* nr of items added to the queue
* the peak number of items waiting in the queue
* nr of times that items could not be added to the queue
krichardsson added a commit that referenced this issue Oct 31, 2015
Corrected bug in make file that ignored options in config.mk file.
krichardsson added a commit that referenced this issue Oct 31, 2015
Added config to reset counters after display and only display queues over flow queues.
krichardsson added a commit that referenced this issue Nov 1, 2015
ataffanel added a commit that referenced this issue Nov 10, 2015
Also added a mode in which the ITM trace does not overflow at the
cost of slowing down the program.

Related to #69
ataffanel added a commit that referenced this issue Nov 12, 2015
Related to #69

This show threads when debugging with gdb. To test:

$ make openocd

In a new terminal:

$ arm-none-eabi-gdb cf2.elf
(gdb) target remote localhost:3333
Remote debugging using localhost:3333
0x00000000 in ?? ()
(gdb) c
Continuing.
WARNING! The target is already running. All changes GDB did to registers will be discarded! Waiting for target to halt.
^C
Program received signal SIGINT, Interrupt.
[Switching to Thread 536875088]
0x080072de in vPortEnterCritical () at lib/FreeRTOS/portable/GCC/ARM_CM4F/port.c:290
290	{
(gdb) info threads
[New Thread 536884680]
[New Thread 536876168]
[New Thread 536881784]
[New Thread 536879304]
[New Thread 536880024]
[New Thread 536887600]
  Id   Target Id         Frame
  7    Thread 536887600 (STABILIZE) 0x00000000 in ?? ()
  6    Thread 536880024 (CRTP-RX) 0x080065f8 in xQueueGenericReceive (xQueue=0x20002628 <ucHeap+6936>, pvBuffer=0x64, xTicksToWait=0, xJustPeeking=536880608)
    at lib/FreeRTOS/queue.c:1146
  5    Thread 536879304 (CRTP-TX) 0x0800634c in xQueueGenericSend (xQueue=0x20006bc8 <slp>, pvItemToQueue=0x64, xTicksToWait=0, xCopyPosition=536879896)
    at lib/FreeRTOS/queue.c:683
  4    Thread 536881784 (PWRMGNT) 0x00000000 in ?? ()
  3    Thread 536876168 (Tmr Svc) 0x08006bec in prvProcessTimerOrBlockTask (xNextExpireTime=0, xListWasEmpty=536876816) at lib/FreeRTOS/timers.c:412
  2    Thread 536884680 (SYSLINK) 0x00000000 in ?? ()
* 1    Thread 536875088 (IDLE :  : Running) 0x080072de in vPortEnterCritical () at lib/FreeRTOS/portable/GCC/ARM_CM4F/port.c:290
ataffanel added a commit that referenced this issue Nov 17, 2015
This has caused random crash before, see #69.
Now that we have added watchdog and debug code it is
time to try to trigger the bug again.
@krichardsson krichardsson added this to the 2016.02 milestone Feb 17, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants