Merge pull request #355 from andrewclink/export_rtos_hooks

Give FreeRTOS Hooks weak linkage
This commit is contained in:
Ruslan V. Uss 2017-03-21 01:50:58 +05:00 committed by GitHub
commit 1575bac0c7
4 changed files with 71 additions and 2 deletions

View file

@ -236,12 +236,12 @@ void IRAM vApplicationStackOverflowHook(TaskHandle_t task, char *task_name) {
}
// .text+0x3d8
void IRAM vApplicationIdleHook(void) {
void __attribute__((weak)) IRAM vApplicationIdleHook(void) {
printf("idle %u\n", WDEV.SYS_TIME);
}
// .text+0x404
void IRAM vApplicationTickHook(void) {
void __attribute__((weak)) IRAM vApplicationTickHook(void) {
printf("tick %u\n", WDEV.SYS_TIME);
}

View file

@ -0,0 +1,10 @@
/**
Configuration overrides for FreeRTOS.
**/
#define configUSE_IDLE_HOOK 1
#define configUSE_TICK_HOOK 1
#include_next "FreeRTOSConfig.h"

View file

@ -0,0 +1,3 @@
# Simple makefile for simple example
PROGRAM=simple
include ../../common.mk

View file

@ -0,0 +1,56 @@
/* Very basic example that just demonstrates we can run at all!
*/
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
void vApplicationIdleHook(void)
{
// Go to sleep; either deeply (waiting for an event to wake)
// or light, allowing FreeRTOS ticks to wake
sdk_wifi_set_sleep_type(WIFI_SLEEP_MODEM);
}
void vApplicationTickHook(void)
{
// Called every tick
}
void task1(void *pvParameters)
{
QueueHandle_t *queue = (QueueHandle_t *)pvParameters;
printf("Hello from task1!\r\n");
uint32_t count = 0;
while(1) {
vTaskDelay(100);
xQueueSend(*queue, &count, 0);
count++;
}
}
void task2(void *pvParameters)
{
printf("Hello from task 2!\r\n");
QueueHandle_t *queue = (QueueHandle_t *)pvParameters;
while(1) {
uint32_t count;
if(xQueueReceive(*queue, &count, 1000)) {
printf("Got %u\n", count);
} else {
printf("No msg :(\n");
}
}
}
static QueueHandle_t mainqueue;
void user_init(void)
{
uart_set_baud(0, 115200);
printf("SDK version:%s\n", sdk_system_get_sdk_version());
mainqueue = xQueueCreate(10, sizeof(uint32_t));
xTaskCreate(task1, "tsk1", 256, &mainqueue, 2, NULL);
xTaskCreate(task2, "tsk2", 256, &mainqueue, 2, NULL);
}