IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 英飞凌TC397移植FreeRTOS -> 正文阅读

[嵌入式]英飞凌TC397移植FreeRTOS

一、准备工作

1.FreeRTOS源码

在这里插入图片描述

2.STM驱动代码

在这里插入图片描述

3.中断相关配置文件

中断配置文件

4.AURIX Developement Studio初始工程(包含SDK)

在这里插入图片描述

二、配置portmacro.h

1.主要接口配置

#define portYIELD()								__syscall( 0 )
/* Set ICR.CCPN to configMAX_SYSCALL_INTERRUPT_PRIORITY. */
#define portDISABLE_INTERRUPTS()	{																									\
										uint32_t ulICR;																					\
										__disable();																						\
										ulICR = __mfcr(CPU_ICR); 		/* Get current ICR value. */									\
										ulICR &= ~portCCPN_MASK;	/* Clear down mask bits. */											\
										ulICR |= configMAX_SYSCALL_INTERRUPT_PRIORITY; /* Set mask bits to required priority mask. */	\
										__dsync(); \
										__mtcr(CPU_ICR, ulICR );		/* Write back updated ICR. */										\
										__isync();																						\
										__enable();																						\
									}

/* Clear ICR.CCPN to allow all interrupt priorities. */
#define portENABLE_INTERRUPTS()		{																	\
										uint32_t ulICR;													\
										__disable();														\
										ulICR = __mfcr(CPU_ICR);		/* Get current ICR value. */	\
										ulICR &= ~portCCPN_MASK;	/* Clear down mask bits. */			\
										__dsync(); \
										__mtcr(CPU_ICR, ulICR );		/* Write back updated ICR. */		\
										__isync();														\
										__enable();														\
									}

/* Set ICR.CCPN to uxSavedMaskValue. */
#define portCLEAR_INTERRUPT_MASK_FROM_ISR( uxSavedMaskValue ) 	\
									{																				\
										uint32_t ulICR;																\
										__disable();																	\
										ulICR = __mfcr(CPU_ICR);		/* Get current ICR value. */						\
										ulICR &= ~portCCPN_MASK;	/* Clear down mask bits. */								\
										ulICR |= uxSavedMaskValue;	/* Set mask bits to previously saved mask value. */		\
										__dsync(); \
										__mtcr(CPU_ICR, ulICR );		/* Write back updated ICR. */							\
										__isync();																			\
										__enable();																			\
									}
#define portYIELD_FROM_ISR( xHigherPriorityTaskWoken ) 						\
								if( xHigherPriorityTaskWoken != pdFALSE ) {	\
									uint32 cpu_index = __mfcr(CPU_CORE_ID);	\
									cpu_index = ((cpu_index < 5) ? cpu_index : 5);	\
									GPSR_list[cpu_index].B.SETR = 1; 				\
									__isync(); }

2.配置选项

#define configUSE_PREEMPTION				1
#define configUSE_IDLE_HOOK					1
/* CPU is actually 300MHz but FPIDIV is 2 meaning divide by 3 for the
peripheral clock. */
#define configCPU_CLOCK_HZ					( IFX_CFG_SCU_PLL_FREQUENCY )
#define configPERIPHERAL_CLOCK_HZ			( ( unsigned long ) configCPU_CLOCK_HZ / 3UL )
#define configTICK_RATE_HZ					( ( TickType_t ) 1000UL )
#define configMAX_PRIORITIES				( 8 )/* Task priority. */
#define configMINIMAL_STACK_SIZE			( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE				( ( size_t ) ( 64U * 1024U ) )
#define configMAX_TASK_NAME_LEN				( 16 )
#define configUSE_TRACE_FACILITY			0
#define configUSE_16_BIT_TICKS				0
#define configIDLE_SHOULD_YIELD				1
#define configUSE_MALLOC_FAILED_HOOK 		1
#define configCHECK_FOR_STACK_OVERFLOW		0
#define configUSE_TICK_HOOK					1
#define configUSE_COUNTING_SEMAPHORES 		1
#define configUSE_RECURSIVE_MUTEXES			0
#define configUSE_MUTEXES					1

/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 				0
#define configMAX_CO_ROUTINE_PRIORITIES 	( 2 )

/* Software timer configuration. */
#define configUSE_TIMERS					1
#define configTIMER_TASK_PRIORITY			( 4 )
#define configTIMER_QUEUE_LENGTH			( 5 )
#define configTIMER_TASK_STACK_DEPTH		configMINIMAL_STACK_SIZE

/* Set the following definitions to 1 to include the API function, or zero
 to exclude the API function. */

#define INCLUDE_vTaskPrioritySet				1
#define INCLUDE_uxTaskPriorityGet				1
#define INCLUDE_vTaskDelete						1
#define INCLUDE_vTaskCleanUpResources			1
#define INCLUDE_vTaskSuspend					1
#define INCLUDE_vTaskDelayUntil					1
#define INCLUDE_vTaskDelay						1

#define configMAX_SYSCALL_INTERRUPT_PRIORITY	RTOS_SYSCALL_INT_PRIORITY_MAX /* Interrupt above priority 64 are not effected by critical sections, but cannot call interrupt safe FreeRTOS functions. */
#define configKERNEL_INTERRUPT_PRIORITY			RTOS_SYSTICK_INT_PRIORITY  /* This is defined here for clarity, but the value must not be changed from 2. */
#define configKERNEL_YIELD_PRIORITY				ROTS_TSW_INT_PRIORITY  /* This is defined here for clarity, but must not be changed from its default value of 1. */

/* Default definition of configASSERT(). */
#define configASSERT( x ) if( ( x ) == 0 ) 		{ portDISABLE_INTERRUPTS(); for( ;; ); }

3.遇到的问题

  • 注意__attribute__用法,前后两个下划线。
  • IfxCpu_Irq_installInterruptHandler编译不通过问题,可暂时注释掉,因为此函数涉及到回调函数的注册,若后续发现中断问题,请首先调查此处。
  • 程序中涉及到的寄存器操作指令,写法统一加上两个下划线且小写,例如:__mfcr;__isync;

三、结语

本次移植过程由于参考了第三方TASKING工程示例代码(目的是将TASKING项目转移到AURIX Development Studio项目),篇幅有限,故port接口中的详细内容没办法展示,移植FreeRTOS的主要思想就是port接口的几个关键API的实现,中断的配置等等,并不局限于哪款单片机,此次移植过程作为工作中的查错记录使用,关于TC3978问题可以和本人沟通,后续有相关内容会继续补充,加油,汽电人。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:38:44  更:2021-12-24 18:39:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:35:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码