【AT-START-L021测评】5、运行FreeRTOS
SDK中提供了freertos的SDK,位于:AT32L021_Firmware_Library_V2.0.5\middlewares\freertos
SDK中也提供了freertos的例程,位于:
AT32L021_Firmware_Library_V2.0.5\utilities\at32l021_freertos_demo
为了更好的学习使用FreeRTOS,还是自己搭建一下环境:
1、将freertos源码加入工程
2、加入include路径:
..\..\..\..\middlewares\freertos\source\include
..\..\..\..\middlewares\freertos\source\portable\rvds\ARM_CM0
..\..\..\..\middlewares\freertos\source\portable\memmang
3、拷贝一个FreeRTOSConfig.h到inc下
FreeRTOSConfig.h可以从FREERTOS例程中找到。
4、将at32l021_int.c中的三个函数注释掉,如果有
因为和FreeRTOS冲突了
/*
void SVC_Handler(void)
{
}
*/
/*
void PendSV_Handler(void)
{
}
*/
/*
void SysTick_Handler(void)
{
}
*/5、include port
根据编译环境选择port文件
/* support ac5 and ac6 compiler */
#if (__ARMCC_VERSION > 6000000)
#include "..\..\..\middlewares\freertos\source\portable\GCC\ARM_CM0\port.c"
#else
#include "..\..\..\middlewares\freertos\source\portable\rvds\ARM_CM0\port.c"
#endif6、freertso开始
建立一个队列,一个发送信息的任务,一个接收信息的任务
/* enter critical */
taskENTER_CRITICAL();
xQueue = xQueueCreate(10, sizeof(char *));
xTaskCreate(
vSenderTask, // 任务函数
"Sender", // 任务名称
512, // 堆栈大小
NULL, // 任务输入参数
tskIDLE_PRIORITY + 1, // 任务优先级
NULL // 任务句柄
);
printf("Create vSenderTask\r\n");
// 创建接收任务
xTaskCreate(
vReceiverTask, // 任务函数
"Receiver", // 任务名称
512, // 堆栈大小
NULL, // 任务输入参数
tskIDLE_PRIORITY + 2, // 任务优先级
NULL // 任务句柄
);
printf("Create vReceiverTask\r\n");
/* exit critical */
taskEXIT_CRITICAL();
vTaskStartScheduler();7、发送信息任务处理
void vSenderTask(void *pvParameters) {
char *strToSend;
int i=0;
for(;;) {
strToSend = (char *)malloc(20 * sizeof(char));
snprintf(strToSend, 20, "Hello, FreeRTOS:%d", i++);
//sprintf(strToSend,"Hello, FreeRTOS:%d",i++);
// 发送字符串指针到队列
if (xQueueSend(xQueue, &strToSend, portMAX_DELAY) != pdPASS) {
// 处理发送失败的情况
printf("vSenderTask xQueueSend fail\r\n");
}
printf("vSenderTask\r\n");
free(strToSend);
// 等待一段时间再发送下一条消息
vTaskDelay(pdMS_TO_TICKS(1000));
}
}8、接收任务处理
void vReceiverTask(void *pvParameters) {
char *receivedStr;
for(;;) {
// 从队列接收字符串指针
if (xQueueReceive(xQueue, &receivedStr, portMAX_DELAY) == pdTRUE) {
// 处理接收到的字符串
printf("Received string: %s\n", receivedStr);
// 如果字符串是动态分配的,需要在这里释放内存(如果适用)
//free(receivedStr); // 注意:这里不需要释放,因为receivedStr是指针,不是动态分配的内存块
// 但是,如果发送的是动态分配的字符串内容(不是指针),则需要在接收方释放
} else {
// 处理接收失败的情况
printf("vReceiverTask xQueueReceive fail\r\n");
}
printf("vReceiverTask\r\n");
// 等待一段时间再接收下一条消息
vTaskDelay(pdMS_TO_TICKS(1000));
}
}9、运行效果
源码:
AT32L021C8T7是一款低功耗的ARM Cortex-M0微控制器,具有高达80MHz的CPU运算速度,并支持高达64KB的闪存存储器和81KB的随机存取存储器。这为运行FreeRTOS提供了足够的处理能力和存储空间。 FreeRTOS是一个开源的实时操作系统,具有良好的可移植性,可以在不同的硬件平台上运行。 引入RTOS会带来一定的性能开销,包括任务切换和上下文切换的开销。 FreeRTOS具有较小的内存占用和高效的资源利用,适合在资源受限的嵌入式系统中使用。 AT-START-L021提供了足够的处理能力和内存资源来支持FreeRTOS的运行。它具备高性能的Cortex-M4内核和丰富的外设接口,可以满足大多数实时操作系统的需求。 通过运行FreeRTOS,可以实现多个智能家居设备的并发控制和状态监测,提高系统的响应速度和用户体验。 FreeRTOS 有着成熟的内存管理机制 AT32L021适用于多种低运行功耗和低待机功耗的需求,如物联网(IoT)、无线通信模块、电机控制和消费电子等。 FreeRTOS的跨平台支持和灵活的内存管理策略使得它能够在AT-START-L021开发板上实现高效运行。用户可以根据系统需求进行定制和优化,以满足特定应用场景的要求。 设计中集成了FreeRTOS,这是一种流行的开源实时操作系统,广泛用于嵌入式系统。集成FreeRTOS可以提高系统的可靠性和响应能力,特别是在多任务处理和实时性能要求高的应用中。 FreeRTOS是开源的,且对于商业用途也是免费的,这降低了开发成本。 FreeRTOS 提供了丰富的任务调度策略,像是基于优先级抢占式调度、时间片轮转调度等。开发者可依据 AT-START-L021 项目实际需求,精准为每个任务分配优先级。 AT32L021系列微控制器具有快速进入和唤醒低功耗模式的能力,以及极低的待机功耗。 FreeRTOS需要一定的内存来运行,特别是在多任务环境中,需要合理分配堆栈大小,以避免内存不足的问题。 FreeRTOS提供了强大的任务调度和管理功能,能够有效地管理多个并发任务,确保系统的实时性和稳定性。 FreeRTOS在AT-START-L021开发板上运行稳定吗 AT-START-L021的高主频和强大的处理能力可以确保流畅的任务执行和快速的响应。 FreeRTOS具有良好的可移植性,可以轻松地移植到不同的微控制器和处理器上。 FreeRTOS提供了丰富的API接口,方便开发者进行任务创建、删除、挂起、恢复等操作。
页:
[1]
2