mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-10-30 20:51:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Blink Example
 | |
| 
 | |
|    This example code is in the Public Domain (or CC0 licensed, at your option.)
 | |
| 
 | |
|    Unless required by applicable law or agreed to in writing, this
 | |
|    software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
 | |
|    CONDITIONS OF ANY KIND, either express or implied.
 | |
| */
 | |
| #include <stdio.h>
 | |
| #include "freertos/FreeRTOS.h"
 | |
| #include "freertos/task.h"
 | |
| #include "driver/gpio.h"
 | |
| #include "sdkconfig.h"
 | |
| #include "esp_heap_trace.h"
 | |
| 
 | |
| /* Can use project configuration menu (idf.py menuconfig) to choose the GPIO
 | |
|    to blink or you can edit the following line and set a number here.
 | |
| */
 | |
| #define BLINK_GPIO CONFIG_BLINK_GPIO
 | |
| 
 | |
| void blink_task2(void *pvParameter)
 | |
| {
 | |
|     TaskHandle_t task = (TaskHandle_t)pvParameter;
 | |
| 
 | |
|     while(1) {
 | |
|         if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) != pdPASS) {
 | |
|             printf("Failed to wait for main task!\n");
 | |
|             return;
 | |
|         }
 | |
|         void *a = malloc(65);
 | |
|         printf("Alloced 65 bytes @ %p\n", a);
 | |
|         void *b = malloc(97);
 | |
|         printf("Alloced 97 bytes @ %p\n", b);
 | |
|         free(a);
 | |
|         printf("Freed @ %p\n", a);
 | |
|         b = malloc(11);
 | |
|         printf("Alloced 11 bytes @ %p\n", b);
 | |
|         b = malloc(24);
 | |
|         printf("Alloced 24 bytes @ %p\n", b);
 | |
|         free(b);
 | |
|         printf("Freed @ %p\n", b);
 | |
|         if (xTaskNotify(task, 0, eNoAction) != pdPASS) {
 | |
|             printf("Failed to notify main task!\n");
 | |
|             return;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| void blink_task(void *pvParameter)
 | |
| {
 | |
|     TaskHandle_t task = 0;
 | |
| 
 | |
|     if(heap_trace_init_tohost() != ESP_OK) {
 | |
|         printf("Failed to init heap trace!\n");
 | |
|         return;
 | |
|     }
 | |
|     xTaskCreatePinnedToCore(&blink_task2, "blink_task2", 2048, xTaskGetCurrentTaskHandle(), 5, &task, 1);
 | |
| 
 | |
|     while(1) {
 | |
|         heap_trace_start(HEAP_TRACE_ALL);
 | |
|         if (xTaskNotify(task, 0, eNoAction) != pdPASS) {
 | |
|             printf("Failed to notify slave task!\n");
 | |
|             return;
 | |
|         }
 | |
|         void *a = malloc(64);
 | |
|         printf("Alloced 64 bytes @ %p\n", a);
 | |
|         void *b = malloc(96);
 | |
|         printf("Alloced 96 bytes @ %p\n", b);
 | |
|         free(a);
 | |
|         printf("Freed @ %p\n", a);
 | |
|         b = malloc(10);
 | |
|         printf("Alloced 10 bytes @ %p\n", b);
 | |
|         b = malloc(23);
 | |
|         printf("Alloced 23 bytes @ %p\n", b);
 | |
|         free(b);
 | |
|         printf("Freed @ %p\n", b);
 | |
|         if (xTaskNotifyWait(0, 0, NULL, portMAX_DELAY) != pdPASS) {
 | |
|             printf("Failed to wait for slave task!\n");
 | |
|             return;
 | |
|         }
 | |
|         heap_trace_stop();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void app_main(void)
 | |
| {
 | |
|     xTaskCreatePinnedToCore(&blink_task, "blink_task", 2048, NULL, 5, NULL, 0);
 | |
| }
 | 
