- 博客(14)
- 资源 (8)
- 收藏
- 关注
原创 CanFestival移植到STM32F103
1.创建工程2.将CanFestival源码,拷贝到工程目录3.删除其它架构和编译器的代码查看include文件夹发现没有cortex-m3架构,因此我们这里借鉴AVR架构进行修改将AVR文件夹重命名为STM32,并删除其它架构文件夹打开STM32文件夹,将里面avr相关的文件删除,我们用的开发环境是MDK,因此将iar相关文...
2019-03-14 13:00:08 6759 11
原创 CanFestival移植准备工作
CanFestival是一种开源的CANOpen协议栈,可以很容易在网上下载CanFestival-3.10。objdictedit是CanFestival的字典生成工具,开发过程中使用objdictedit配置CANOpen字典能够很大程度上提高开发效率,objdictedit也可以很容易下载并安装。查看CanFestival源码查看objdictedit...
2019-03-14 10:22:13 1477
原创 FreeRTOS协程
FreeRTOS的协程,实际上是线程并发出来的。从协程控制块中没有栈空间就能够知道,每个线程并发出来的协程共用一个栈空间。/* 协程控制块 */typedef struct corCoRoutineControlBlock{ crCOROUTINE_CODE pxCoRoutineFunction; /* 协程函数指针 */ ListItem_t xGenericList...
2019-03-12 17:18:59 3997
原创 FreeRTOS任务通知
任务通知可以替代二进制信号量、计数信号量、事件组,可以替代长度为1的队列(可以保存一个32位整数或指针值),并且任务通知速度更快、使用的RAM更少。先看一下任务TCB/* 任务TCB */typedef struct tskTaskControlBlock{ volatile StackType_t *pxTopOfStack; /* 栈顶地址 */ ...
2019-03-12 11:27:02 253
原创 FreeRTOS事件标志组
在裸机编程过程中,经常会用到标志位。但是在操作系统中,涉及到多个任务同时访问的问题,因此FreeRTOS提供了事件标志组机制。先看一下事件标志组结构体/* 事件标志组结构体 */typedef struct EventGroupDef_t{ EventBits_t uxEventBits; /* 事件标志位 */ List_t xTasksWaitingForBits...
2019-03-11 22:47:42 1378
原创 FreeRTOS软件定时器
软件定时器结构体/* 软件定时器结构体 */typedef struct tmrTimerControl{ const char *pcTimerName; /* 定时器名字 */ ListItem_t xTimerListItem; /* 定时器列表项 */ TickType_t xTimerPeriodInTicks; /* 定时器定时时间 */ UBaseTyp...
2019-03-11 18:06:33 1660
原创 FreeRTOS队列集
任务通信过程中,如果消息类型不同,使用一条队列来实现则有些麻烦。FreeRTOS 提供队列集合,用于对多个队列以及信号量进行“监听”,只要其中不管哪一个有消息到来,都可以让任务退出阻塞状态。这就类似于linux网络编程时的select(IO复用)。先看一下队列结构体多了一个pxQueueSetContainer成员变量,队列所属队列集。在插入队列项的时候,用于查找队列所...
2019-03-10 21:38:38 1815
原创 FreeRTOS互斥锁
信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要包含semphr.h头文件。信号量包括二值信号量、计数信号量、互斥信号量和递归互斥信号量。和普通队列比起来,信号量虽然没有队列项实体,但是信号量值等同于队列项个数。互斥锁和递归互斥锁:互斥锁是用来保证共享数据操作的完整性,同时只能有一个任务访问共享数据。递归互斥...
2019-03-09 23:06:35 12526
原创 FreeRTOS信号量
信号量API函数实际上都是宏,它使用现有的队列机制。这些宏定义在semphr.h文件中。如果使用信号量或者互斥量,需要包含semphr.h头文件。信号量包括二值信号量、计数信号量、互斥信号量和递归互斥信号量。和普通队列比起来,信号量虽然没有队列项实体,但是信号量值等同于队列项个数。创建二值信号量实际上就是创建一个队列项大小为0、队列长度为1的队列,FreeRTOS提供了两个...
2019-03-08 23:36:03 1029
原创 FreeRTOS队列
队列是FreeRTOS主要的任务间通讯方式,包括二进制信号量、计数信号量、互斥量和递归互斥量都是使用队列来实现的。先看一下,队列的数据结构/* 队列结构体 */typedef struct QueueDefinition{ int8_t *pcHead; /* 队列项存储区头部,即第一个队列项 */ int8_t *pcWriteTo; /* 队列项插入指针 */ unio...
2019-03-05 01:51:26 1138
原创 FreeRTOS任务优先级
FreeRTOS任务优先级数值越小优先级越低,系统在运行过程中允许修改任务优先级修改任务优先级的主要工作包括:如果新的优先级大于当前任务优先级,则请求切换重新设置事件列表值将任务从原就绪列表中移除并挂接到新的就绪列表中/* 设置任务优先级 */void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriorit...
2019-03-01 16:31:50 2670
原创 FreeRTOS任务挂起与解除
任务挂起的主要工作包括:将任务从状态列表中移除并挂接到挂起列表中更新任务唤醒时间如果挂起当前任务,需要请求切换/* 挂起任务 */void vTaskSuspend(TaskHandle_t xTaskToSuspend){ TCB_t *pxTCB; /* 进入临界区 */ taskENTER_CRITICAL(); { /* 通过任务句柄获取任务TCB *...
2019-03-01 15:53:16 1932
原创 FreeRTOS空闲任务
空闲任务在启动调度器的时候被创建/* 启动调度器 */void vTaskStartScheduler( void ){ BaseType_t xReturn; #if (configSUPPORT_STATIC_ALLOCATION == 1) { ...... } #else { /* 创建空闲任务 */ xReturn = xTaskCreate(prvI...
2019-03-01 09:58:15 3973
原创 FreeRTOS任务延时函数
系统提供了两个任务延时函数:相对延时函数vTaskDelay()和绝对延时函数vTaskDelayUntil()相对延时是指:vTaskDelay()开始执行到退出执行的时间固定/* 相对延时函数 */void vTaskDelay(const TickType_t xTicksToDelay){ BaseType_t xAlreadyYielded = pdFALSE; ...
2019-03-01 00:04:33 9211 1
C语言ntp协议获取网络时间
2017-04-12
经纬度计算日出日落时间(C语言)
2017-04-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人