打印
[活动专区]

【AT-START-L021测评】5、运行FreeRTOS

[复制链接]
1163|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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"

#endif
6、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、运行效果



源码:
test1.rar (86.66 KB)


使用特权

评论回复
沙发
timfordlare| | 2024-12-3 07:56 | 只看该作者
AT32L021C8T7是一款低功耗的ARM Cortex-M0微控制器,具有高达80MHz的CPU运算速度,并支持高达64KB的闪存存储器和81KB的随机存取存储器。这为运行FreeRTOS提供了足够的处理能力和存储空间。

使用特权

评论回复
板凳
juliestephen| | 2024-12-3 08:42 | 只看该作者
FreeRTOS是一个开源的实时操作系统,具有良好的可移植性,可以在不同的硬件平台上运行。

使用特权

评论回复
地板
janewood| | 2024-12-6 20:21 | 只看该作者
引入RTOS会带来一定的性能开销,包括任务切换和上下文切换的开销。

使用特权

评论回复
5
timfordlare| | 2024-12-6 23:25 | 只看该作者
FreeRTOS具有较小的内存占用和高效的资源利用,适合在资源受限的嵌入式系统中使用。

使用特权

评论回复
6
kkzz| | 2024-12-7 02:28 | 只看该作者
AT-START-L021提供了足够的处理能力和内存资源来支持FreeRTOS的运行。它具备高性能的Cortex-M4内核和丰富的外设接口,可以满足大多数实时操作系统的需求。

使用特权

评论回复
7
yorkbarney| | 2024-12-7 05:30 | 只看该作者
通过运行FreeRTOS,可以实现多个智能家居设备的并发控制和状态监测,提高系统的响应速度和用户体验。

使用特权

评论回复
8
beacherblack| | 2024-12-9 09:54 | 只看该作者
FreeRTOS 有着成熟的内存管理机制

使用特权

评论回复
9
everyrobin| | 2024-12-9 12:59 | 只看该作者
AT32L021适用于多种低运行功耗和低待机功耗的需求,如物联网(IoT)、无线通信模块、电机控制和消费电子等。

使用特权

评论回复
10
sdlls| | 2024-12-9 16:01 | 只看该作者
FreeRTOS的跨平台支持和灵活的内存管理策略使得它能够在AT-START-L021开发板上实现高效运行。用户可以根据系统需求进行定制和优化,以满足特定应用场景的要求。

使用特权

评论回复
11
sesefadou| | 2024-12-10 13:29 | 只看该作者
设计中集成了FreeRTOS,这是一种流行的开源实时操作系统,广泛用于嵌入式系统。集成FreeRTOS可以提高系统的可靠性和响应能力,特别是在多任务处理和实时性能要求高的应用中。

使用特权

评论回复
12
timfordlare| | 2024-12-10 14:30 | 只看该作者
FreeRTOS是开源的,且对于商业用途也是免费的,这降低了开发成本。

使用特权

评论回复
13
mickit| | 2024-12-10 15:34 | 只看该作者
FreeRTOS 提供了丰富的任务调度策略,像是基于优先级抢占式调度、时间片轮转调度等。开发者可依据 AT-START-L021 项目实际需求,精准为每个任务分配优先级。

使用特权

评论回复
14
pentruman| | 2024-12-10 17:33 | 只看该作者
AT32L021系列微控制器具有快速进入和唤醒低功耗模式的能力,以及极低的待机功耗。

使用特权

评论回复
15
alvpeg| | 2024-12-10 18:29 | 只看该作者
FreeRTOS需要一定的内存来运行,特别是在多任务环境中,需要合理分配堆栈大小,以避免内存不足的问题。

使用特权

评论回复
16
chenci2013| | 2024-12-10 19:58 | 只看该作者
FreeRTOS提供了强大的任务调度和管理功能,能够有效地管理多个并发任务,确保系统的实时性和稳定性。

使用特权

评论回复
17
gygp| | 2024-12-10 20:29 | 只看该作者
FreeRTOS在AT-START-L021开发板上运行稳定吗

使用特权

评论回复
18
hilahope| | 2024-12-11 16:40 | 只看该作者
AT-START-L021的高主频和强大的处理能力可以确保流畅的任务执行和快速的响应。

使用特权

评论回复
19
wangdezhi| | 2024-12-12 13:43 | 只看该作者
FreeRTOS具有良好的可移植性,可以轻松地移植到不同的微控制器和处理器上。

使用特权

评论回复
20
biechedan| | 2024-12-12 14:12 | 只看该作者
FreeRTOS提供了丰富的API接口,方便开发者进行任务创建、删除、挂起、恢复等操作。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

37

主题

75

帖子

0

粉丝