本帖最后由 jf_66501560 于 2023-1-29 14:17 编辑 一、背景介绍1.1 N32G45X介绍 N32G457系列采用 32 bit ARM Cortex-M4F内核,最高工作主频144MHz,支持浮点运算和DSP指令, 集成多达512KB Flash、144KB SRAM、4x12bit 5Msps ADC、4xOPAMP、7xCOMP、2x1Msps 12bitDAC,支持多达24通道电容式触摸按键,集成多路U(S)ART、I2C、SPI、QSPI、USB、CAN通信接 口,1xSDIO接口,1x10/100M以太网接口,数字摄像头(DVP)接口,内置密码算法硬件加速引擎。 1)内核 CPU
FreeRTOS 是市场领先的微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,历时 15 年,现在每 170 秒下载一次。FreeRTOS 在麻省理工学院的开源许可证下免费分发,包括一个内核和越来越多的适用于所有行业领域的库。FreeRTOS 的构建强调可靠性和易用性。 freeRTOS源码:https://github.com/freeRTOS freeRTOS文档:https://www.freertos.org/zh-cn-cmn-s/features.html 二、freeRTOS API介绍2.1 任务2.1.1 xTaskCreate
pvTaskCode:任务处理函数,一个独立的任务,不能返回,可以在函数内删除。 pcName:任务的名称,用于标识任务。 usStackDepth:任务栈的宽度,该值表示栈单元的数量,一个栈单元为16位或者32位,由portSTACK_TYPE指定,当该值与一个栈单元的大小(16或32)相乘即可得任务栈的大小。 pvParameters:任务的参数,用于向创建的任务传递信息。 uxPriority:任务优先级。 pxCreatedTask:任务句柄的指针,在删除任务的时候需要用到任务句柄。 2.1.2 xTaskCreateStatic
pxTaskCode:任务处理函数 pcName:任务名称 ulStackDepth:任务栈的宽度 pvParameters:任务处理函数的参数 uxPriority:优先级 puxStackBuffer:任务栈,一般为成员为StackType_t的数组 pxTaskBuffer:保存任务控制块(Task control block)TCB结构体的buffer。 2.1.3 vTaskDelete
xTask:任务句柄。 2.2 队列、互斥锁、信号量2.2.1 xQueueCreate
uxQueueLength:队列所能容纳的数据项的最大个数 uxItemSize:数据项的大小,单位为字节 返回: QueueHandle_t:成功则返回创建队列的句柄,失败返回NULL。 2.2.2 xQueueCreateStatic
uxQueueLength:队列能容纳的数据项的最大个数。 uxItemSize:数据项的大小。 pucQueueStorageBuffer:保存队列的buffer,大小为uxItemSize乘uxQueueLength。 pxQueueBuffer:保存消息队列结构体的buffer。 2.2.3 xQueueSend
xQueue:队列句柄 pvItemToQueue:指向数据项的指针 xTicksToWait:超时时间,超过该值未将消息发送出去则返回错误 2.2.4 xQueueReceive
xQueue:消息队列句柄。 pvBuffer:接收缓冲区,接受到的数据项将缓存到这里。 xTicksToWait:超时时间。如果 INCLUDE_vTaskSuspend 设置为 “1” ,则将阻塞时间指定为 portMAX_DELAY 会导致任务无限期地阻塞(没有超时)。 2.2.5 xSemaphoreCreateBinary
返回: SemaphoreHandle_t 信号量句柄。 2.2.6 xSemaphoreCreateMutex
返回 SemaphoreHandle_t:互斥信号量句柄。 2.2.7 vSemaphoreDelete
xSemaphore:信号量句柄。 2.2.8 xSemaphoreTake
xSemaphore:信号量句柄。 xTicksToWait:超时时间。 2.2.9 xSemaphoreGive
xSemaphore:信号量句柄。 2.3 事件组 2.3.1 xEventGroupCreate
返回: EventGroupHandle_t:事件组句柄。 2.3.2 vEventGroupDelete
xEventGroup:事件组句柄。 2.3.3 xEventGroupWaitBits
xEventGroup:事件组句柄。 uxBitsToWaitFor:等待的事件组的位,该值为正在等待的事件位的按位或,如(1<<5)|(1<<3)的值表示等待bit5和bit3。 xClearOnExit:return前是否清除相应的位。 xWaitForAllBits:是否等待所有位都被设置。 xTicksToWait:超时时间。 返回: EventBits_t:事件组的事件位被设置的状态。 2.3.4 xEventGroupSetBits
xEventGroup:事件组句柄。 uxBitsToSet:设置的位。 返回: EventBits_t:事件组的事件位的状态。 2.4 软件定时器 2.4.1 xTimerCreate
pcTimerName:定时器的名称。 xTimerPeriod:定时器周期,若需要延时的时间是的单位是ms,可使用pdMS_TO_TICKS。 uxAutoReload:循环定时器还是单次定时器。 pvTimerID:定时器ID,用于一个回调函数被注册到多个定时器的情况下识别定时器。 pxCallbackFunction:定时器回调函数,需满足void vCallbackFunction( TimerHandle_t xTimer )原型。 2.4.2 xTimerStart
xTimer:定时器句柄。 xBlockTime:如果在xTimerStart的时候定时器的守护进程的队列已满,xBlockTime表示阻塞等待的时间。定时器队列的长度由configTIMER_QUEUE_LENGTH指定。 2.4.3 xTimerStop
xTimer:定时器句柄。 xBlockTime:同xTimerStart的xBlockTime。 2.4.4 xTimerDelete
xTimer:定时器句柄。 xBlockTime:同xTimerStart的xBlockTime。 三、freeRTOS移植 3.1 源码下载和源码文件结构 3.1.1 源码下载 https://freertos.org/zh-cn-cmn-s/index.html 3.1.2 源码文件结构 ![]() 根目录的freeRTOS是内核,freeRTOS-plus是扩展,扩展中有freeRTOS的命令行工具CLI,TCP、和调试freeRTOS时获取任务调度、内存管理、消息队列和互斥量等各种事件信息的Trace。 ![]() 进入内核目录(即freeRTOS文件夹)的Source。
1)添加内核源码 ![]() 2)添加移植文件 ![]() 3)添加头文件 ![]() 3.3 增加freeRTOS配置文件 从DemoCORTEX_M4F_STM32F407ZG-SK中复制freeRTOSConfig.h到一个已经被keil设置好的inc目录下,该文件用于配置内核。 ![]() 3.4 删除n32g45x_it.c中的systick和svc中断 ![]() 四、注意事项1)keil要使能C99,否则编译会报错。 ![]() 2)keil需要5.3版本,否则n32g的dfp安装不成功。 五、参考https://blog.csdn.net/qq_49864684/article/details/119207495 |
只有小组成员才能发言,加入小组>>
2467 浏览 0 评论
2452 浏览 0 评论
【国民技术N32项目移植】半小时移植完成SPI1驱动代码&使用W5500模块进行UDP通信,十分甚至九分好用
3149 浏览 0 评论
【国民技术N32项目移植】基于N32G4FR和小度音响的智能家庭中枢控制系统
2934 浏览 0 评论
3276 浏览 0 评论
2468浏览 0评论