stm8 freertos移植_stm32 freertos can_freertos stm32 移植

电脑杂谈  发布时间:2017-02-18 21:01:06  来源:网络整理

介绍freertos在stm32上的移植说明,每一步都很详细,让你学会在stm32+freeRTOS的平台上开发应用程序

一、各文件关键部分的实现:1、PORTMACRO.H 宏定义部分

1)定义编译器相关的各种数据类型

#define portCHAR char

#define portFLOAT float

#define portDOUBLE double

#define portLONG long

#define portSHORT short

#define portSTACK_TYPE unsigned portLONG

#define portBASE_TYPE long

2)架构相关的定义

Cortex-M3的堆栈增长方向为高地址向低地址增长

#define portSTACK_GROWTH ( -1 )

每毫秒的心跳次数

#define portTICK_RATE_MS ( ( portTickType ) 1000 / configTICK_RATE_HZ )

访问SRAM的字节对齐

#define portBYTE_ALIGNMENT 8

3)定义用户主动引起内核调度的2个函数

强制上下文切换,用在任务环境中调用

#define portYIELD() vPortYieldFromISR()

强制上下文切换,用在中断处理环境中调用

#define portEND_SWITCHING_ISR( xSwitchRequired ) if( xSwitchRequired ) vPortYieldFromISR()

4)定义临界区的管理函数

中断允许和关闭

#define portDISABLE_INTERRUPTS() vPortSetInterruptMask()

#define portENABLE_INTERRUPTS() vPortClearInterruptMask()

临界区进入和退出

#define portENTER_CRITICAL() vPortEnterCritical()

#define portEXIT_CRITICAL() vPortExitCritical()

用于在中断环境的中断允许和关闭

#define portSET_INTERRUPT_MASK_FROM_ISR() 0;vPortSetInterruptMask()

#define portCLEAR_INTERRUPT_MASK_FROM_ISR(x) vPortClearInterruptMask();(void)x

2、PORT.C C接口部分

1)堆栈初始化

portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )

{

*pxTopOfStack = portINITIAL_XPSR; /* 程序状态寄存器 */

pxTopOfStack--;

*pxTopOfStack = ( portSTACK_TYPE ) pxCode; /* 任务的入口点 */

pxTopOfStack--;

*pxTopOfStack = 0; /* LR */

pxTopOfStack -= 5; /* R12, R3, R2 and R1. */

*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* 任务的参数 */

pxTopOfStack -= 8; /* R11, R10, R9, R8, R7, R6, R5 and R4. */


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-33191-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...