首页 > 其他分享 >移植FreeRTOS于LPC54608芯片,IAR

移植FreeRTOS于LPC54608芯片,IAR

时间:2024-07-22 23:29:43浏览次数:9  
标签:LPC54608 FreeRTOS Handler void 文件夹 SysTick interrupt IAR

   1.源码下载

·        在移植之前,我们首先要获取到FreeRTOS的官方的源码包

FreeRTOS - Market leading RTOS (Real Time Operating System) for embedded systems with Internet of Things extensions

直接在官网下载freertos源码包。

下载后打开文件夹 可以看到:

进入FreeRTOS文件夹

然后在打开Source

2.移植

在你的原有项目中,新建一个FreeRTOS文件夹

然后将源码文件\FreeRTOSv202212.01\FreeRTOS\Source中的几个.c文件复制到freeRTOS文件夹中

然后新建include和portable文件夹

然后我们回到源码文件夹,点开Source,确定好你用的是哪个IDe,我用的是IAR

所以进入SOurce后,点开portable,找到IAR

然后去网上搜芯片型号,可知,lpc54608的架构是arm cortex M4,所以打开ARM_CM4F文件夹,将整个文件夹复制到工程FreeRTOS/portable中(我的项目中在freeRTOS中还新建了个IAR文件夹,然后将ARM_CM4F放入了portable/IAR中,其实没有必要 )

然后回到源码路径:source/portable中,找到memmang

也复制到工程FreeRTOS/portable中(其实只要ARM_CM4F和mengmang就行)

然后将源码文件中的include全部复制到FreeRTOS文件夹中

移植成功

3.工程修改

右键option,添加以下group:FreeRTOS,然后将FreeRTOS中整个include文件夹添加到inc文件中,FreeRTOS中的的七个.c文件加入,然后选择MemMang中的heap_4.c和ARM_CM4F中的三个文件加入

然后添加头文件路径,主要是FreeRTos中的include,然后ARM_CM4F,不放心的话,新建的几个文件夹都可以加进去。

如果这时候点击编译会发现,其报错SysTick_Handler出现重定义,这是因为,原来代码文件中含有SysTick_Handler,而FreeRTOS的port.c中也需要用的,一般只要把原工程文件的SysTick_Handler主注释掉留下port中的就行。

但是我原来程序中,有用到SysTick_Handler,直接注释会导致功能不完整,所以可以新建一个函数,因为原工程中的SysTick_Handler位于system_LPC54608.c,所以打开工程,注释掉SysTick_Handler,将其改为Original_SysTick_Handler。


void Original_SysTick_Handler(void)
{
    if(!Delay_Enable) // 如果延时未启用
    {
        TimeMS++; // 计时增加
    }
    else
    {
        TimeTick++; // 延时计数增加
    }
}
//void SysTick_Handler(void)
//{
//    if(!Delay_Enable) // 如果延时未启用
//    {
//        TimeMS++; // 计时增加
//    }
//    else
//    {
  //      TimeTick++; // 延时计数增加
//    }
//}

然后回到port.c,注释掉原来的,修改为

//void xPortSysTickHandler( void )
//{
//    /* The SysTick runs at the lowest interrupt priority, so when this interrupt
//     * executes all interrupts must be unmasked.  There is therefore no need to
//     * save and then restore the interrupt mask value as its value is already
//     * known. */
//    portDISABLE_INTERRUPTS();
//    {
//        /* Increment the RTOS tick. */
//        if( xTaskIncrementTick() != pdFALSE )
//        {
//            /* A context switch is required.  Context switching is performed in
//             * the PendSV interrupt.  Pend the PendSV interrupt. */
//            portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
//        }
//    }
//    portENABLE_INTERRUPTS();
//}
void xPortSysTickHandler(void)
{
    /* The SysTick runs at the lowest interrupt priority, so when this interrupt
     * executes all interrupts must be unmasked.  There is therefore no need to
     * save and then restore the interrupt mask value as its value is already
     * known. */
    portDISABLE_INTERRUPTS();
    {
        /* Increment the RTOS tick. */
        if(xTaskIncrementTick() != pdFALSE)
        {
            /* A context switch is required.  Context switching is performed in
             * the PendSV interrupt.  Pend the PendSV interrupt. */
            portNVIC_INT_CTRL_REG = portNVIC_PENDSVSET_BIT;
        }

        /* 调用原来的 SysTick 处理函数 */
        Original_SysTick_Handler();
    }
    portENABLE_INTERRUPTS();
}

实现FreeRTOS'的滴答执行时调用原来的滴答定时器处理函数

编译成功!测试后也没有发现问题

标签:LPC54608,FreeRTOS,Handler,void,文件夹,SysTick,interrupt,IAR
From: https://blog.csdn.net/qq_50688173/article/details/140552882

相关文章

  • 嵌入式C++、FreeRTOS、MySQL、Spring Boot和MQTT协议:智能零售系统详细流程介绍(代码示
    项目概述随着科技的发展,零售行业正经历着一场数字化转型。智能零售系统通过集成嵌入式技术和大数据分析,为商家提供了高效的运营管理工具。该系统的核心目标是提升顾客体验、优化库存管理、降低运营成本以及实现精准营销。本项目将结合多种技术栈,包括嵌入式硬件、嵌入式软件、......
  • 牛客FreeRTOS刷题总结
    1.在FreeRTOS中延时函数也相对模式和绝对模式,在FreeRTOS中不同的模式用的函数不同,其中函数vTaskDelay()是相对模式(相对延时函数),函数vTaskDelayUntil()是绝对模式(绝对延时函数)。两者都会阻塞任务。具体内容可以看博客这一篇:https://www.cnblogs.com/bathwind/p/18139217......
  • FreeRTOS操作系统(详细速通篇)——— 第六章
        本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!目录系统中断管理1什么是中断?1.1中断定义1.2中断执行机制​2中断优先级如何分组 2.1优先级......
  • 简洁实用的原创度检测工具AntiPlagiarism NET 4.132
    AntiPlagiarismNET是一个适用于Windows的程序,它允许您检查文本的唯一性和从不同Internet来源借用的存在。使用AntiPlagiarismNET,您可以:将程序用于不同的目的该程序适用于学生、教师、记者、文案作者和其他需要检查其文本或其他作者文本的原创性的用户,该程序将帮助您避免抄......
  • FreeRTOS【面试】实时操作系统的知识总结
    RTOS的实时性是如何实现的?任务之间是如何通信的?二值信号量与互斥信号量的区别?优先级反转?如何解决优先级反转问题?任务通知是怎么实现的?框架性的回答一个嵌入式系统Freertos的启动到结束的过程?任务切换的原理? 除了任务切换对freertos其他底层了解吗?讲讲FreeRT......
  • FreeRTOS操作系统(详细速通篇)——— 第四章
             本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅!目录任务创建和删除1任务创建方式1.1动态任务创建1.2静态任务创建2任务删除函数......
  • FreeRTOS操作系统(详细速通篇)——— 第一章
            本专栏将对FreeRTOS进行快速讲解,带你了解并使用FreeRTOS的各部分内容。适用于快速了解FreeRTOS并进行开发、突击面试、对新手小白非常友好。期待您的后续关注和订阅目录1FreeRTOS简介1.1 什么为FreeRTOS?1.2为什么选择FreeRTOS?1.3FreeRTOS与裸机的区......
  • FreeRTOS
    1.栈的大小栈的大小通常指的是每个任务(或线程)在运行时分配的内存空间,用于存储局部变量、函数调用信息(如返回地址、参数等)、临时数据等。它和任务的大小有一定关系,但并不是直接对应的。代码片段中:_Min_Heap_Size=0x400;/*requiredamountofheap*/_Min_Stack_Size=0x10......
  • STM32第二十课:FreeRTOS任务管理和信号量
    目录一、任务管理方式二、任务堆栈溢出检测三、二值信号量(任务同步)四、计数信号量五、互斥信号量六、队列一、任务管理方式1.任务创建成功后会添加到就绪链表中,开启调度器,此时任务调度器会去就绪链表中找优先级最高的任务执行。若优先级一样则按照创建任务的先后来......
  • OpenDiary 24.7
    现在是,7月13日。距离上一次写日记过去了58天致敬传奇耐拖王xiwon那么,在鼠鼠肘赢牢大之前的这段时间,whathappened,onearth?五月下旬,前去了西安邀请赛,打的一坨。回来之后写了一点游记,但是居然还没有写完那么到底为什么没有写完呢?这要从很久以前开始说众所周知(?),距......