瑞萨单片机论坛
直播中

h1654155285.8644

6年用户 234经验值
擅长:处理器/DSP
私信 关注
[经验]

【RA4M2设计挑战赛】FreeRTOS环境的搭建

瑞萨IDE的一个很大优点就是可以利用IDE搭建FreeRTOS,因此本贴就是对FreeRTOS编程进行介绍。
一、项目的建立
项目的建立方法与本人前两次发表的帖子步骤是基本相同的,就是在部分界面要选择操作系统,如下图两图所示。
694f4d4886287d426a2e5039f6e144f6_poYBAGOAsFeAEi6OAABGPRQv2Dk995.png
714515b11f4d090ec77216c2605679ab_pYYBAGOAsM6AEzL9AAB4mA02WN8366.png

一路点NEXT后,就可以建立项目,项目建立完成后,可以对FreeRTOS进行设置。
二、任务的建立
keil工程建立后,在keil的工程里面会自动包括FreeRTOS的源文件。下面再建立操作系统的线程。如下图所示。
49ee3d4e52b0c3128276eaa0ec6f51f8_poYBAGOAtLCAMHN5AAJEyP7VZyg363.png
建立步骤如下:
(1)点击Stacks
(2)点击New Thread,建立新的线程
(3)电机thread窗口,会显示下面的窗口③,该窗口的Common表示对FreeRTOS的设置,对应的是以前对FreeRTOSConfig.h文件的设置,在该软件中,直接在窗口进行设置就可以了,感觉方便了很多。
(4)对线程进行设置。点击窗口④的新建线程,可以对该线程进行设置,如下图所示。
00f19690a74b94a393661f1591659811_poYBAGOAtaKAWA2WAAAvFzUzy2E031.png

图中的Symbol对应的是线程的句柄,Name对应的是该线程的名称,Stack Size对应的是该该线程的堆栈。这里和以前在keil中设置是不一样的,这里直接是以字节为单位,而在keil中自己建立线程时,堆栈是以4字节为单位的。此外,该软件默认将线程设置为静态内存管理。
按照上述方法,本人建立了两个线程,一个是led1_thread,一个是led2_thread,计划分别控制两个LED的闪烁。
三、任务的编写
生成任务后,再设置LED,其中LED1对应的P415,LED2对应的是P404,IO设置如下所示。
7b52db0795e8a922b45120b6a31f4056_poYBAGOAuACAbzHBAACiEi4wOKI786.png
将两个IO设置完成后,点击“Generate Project Content”,便可以生成所需要的代码。生产完成后,打开项目所在目录中的keil文件,便可以看到生成的代码。
从图中可以看到,在Keil的文件目录中已经自动集成了FreeRTOS的源文件,而且自己生成了led1_thread_entry和led2_thead_entry两个C文件,在编程的时候直接在这两个文件中编写线程的程序即可。
以下分别是led1和led2的线程。

#include "led1_thread.h"
                /* Led1 Thread entry function */
                /* pvParameters contains TaskHandle_t */
                void led1_thread_entry(void * pvParameters)
                {
                    FSP_PARAMETER_NOT_USED(pvParameters);

                    /* TODO: add your own code here */
                    while(1)
                    {
                        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_15, BSP_IO_LEVEL_LOW); 
						vTaskDelay(1000);
						R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_15, BSP_IO_LEVEL_HIGH); 
						vTaskDelay(1000);						
                    }
                }
#include "led2_thread.h"
                /* Led2 Thread entry function */
                /* pvParameters contains TaskHandle_t */
                void led2_thread_entry(void * pvParameters)
                {
                    FSP_PARAMETER_NOT_USED(pvParameters);

                    /* TODO: add your own code here */
                    while(1)
                    {
                        R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_LOW); 
						vTaskDelay(2000);
						R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_04, BSP_IO_LEVEL_HIGH); 
						vTaskDelay(2000);
                    }
                }

对于线程的建立、参数等设置,用户均不用关心。在主程序中也不用在编写代码。到这里,简单的两线程程序就编写完成了。
四、程序执行
程序编写完成后,下载进开发板,就会发现开发板上的两个LED按照不同的时间间隔进行闪烁,其中一个间隔是1s,一个间隔是2s。
通过上述的操作就可以完成一个嵌入式系统的建立,感觉是很方便了,这里凸显了瑞萨半导体开发的便捷性。

更多回帖

发帖
×
20
完善资料,
赚取积分