单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 775|回复: 7
打印 上一主题 下一主题
收起左侧

FreeRTOS stm32f103c8t6 keil工程源码与开发手册下载

[复制链接]
跳转到指定楼层
楼主
thw01 发表于 2018-9-6 11:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在STM32F103C8T6上移植FreeRTOSFreertos 移植到stm32F103ct6,参考的是《STM32F103 FreeRTOS开发手册V1.1.pdf》第6章实验2,实验中会创建两个应用任务task1_task和task2_task,当task1_task运行5次之后会删除task2_task,同时实现LED闪烁功能。考虑到C8T6的存储空间有限,未采用正点原子的FreeRTOSConfig.h文件!!

全部资料51hei下载地址:
FreeRTOS_ALL_6-2_180424-2115.rar (532.36 KB, 下载次数: 25)
STM32F103 FreeRTOS开发手册V1.1.pdf.7z (10.68 MB, 下载次数: 19)

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "FreeRTOS.h"
  7. #include "task.h"


  8. /************************************************
  9. ************************************************/

  10. //空闲任务任务堆栈
  11. static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
  12. //空闲任务控制块
  13. static StaticTask_t IdleTaskTCB;

  14. //定时器服务任务堆栈
  15. static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
  16. //定时器服务任务控制块
  17. static StaticTask_t TimerTaskTCB;

  18. //任务优先级
  19. #define START_TASK_PRIO                1
  20. //任务堆栈大小       
  21. #define START_STK_SIZE                 128  
  22. //任务堆栈
  23. StackType_t StartTaskStack[START_STK_SIZE];
  24. //任务控制块
  25. StaticTask_t StartTaskTCB;
  26. //任务句柄
  27. TaskHandle_t StartTask_Handler;
  28. //任务函数
  29. void start_task(void *pvParameters);

  30. //任务优先级
  31. #define TASK1_TASK_PRIO                2
  32. //任务堆栈大小       
  33. #define TASK1_STK_SIZE                 128  
  34. //任务堆栈
  35. StackType_t Task1TaskStack[TASK1_STK_SIZE];
  36. //任务控制块
  37. StaticTask_t Task1TaskTCB;
  38. //任务句柄
  39. TaskHandle_t Task1Task_Handler;
  40. //任务函数
  41. void task1_task(void *pvParameters);

  42. //任务优先级
  43. #define TASK2_TASK_PRIO                3
  44. //任务堆栈大小       
  45. #define TASK2_STK_SIZE                 128
  46. //任务堆栈
  47. StackType_t Task2TaskStack[TASK2_STK_SIZE];
  48. //任务控制块
  49. StaticTask_t Task2TaskTCB;
  50. //任务句柄
  51. TaskHandle_t Task2Task_Handler;
  52. //任务函数
  53. void task2_task(void *pvParameters);


  54. //获取空闲任务地任务堆栈和任务控制块内存,因为本例程使用的
  55. //静态内存,因此空闲任务的任务堆栈和任务控制块的内存就应该
  56. //有用户来提供,FreeRTOS提供了接口函数vApplicationGetIdleTaskMemory()
  57. //实现此函数即可。
  58. //ppxIdleTaskTCBBuffer:任务控制块内存
  59. //ppxIdleTaskStackBuffer:任务堆栈内存
  60. //pulIdleTaskStackSize:任务堆栈大小
  61. void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
  62.                                                                    StackType_t **ppxIdleTaskStackBuffer,
  63.                                                                    uint32_t *pulIdleTaskStackSize)
  64. {
  65.         *ppxIdleTaskTCBBuffer=&IdleTaskTCB;
  66.         *ppxIdleTaskStackBuffer=IdleTaskStack;
  67.         *pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
  68. }

  69. //获取定时器服务任务的任务堆栈和任务控制块内存
  70. //ppxTimerTaskTCBBuffer:任务控制块内存
  71. //ppxTimerTaskStackBuffer:任务堆栈内存
  72. //pulTimerTaskStackSize:任务堆栈大小
  73. void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
  74.                                                                         StackType_t **ppxTimerTaskStackBuffer,
  75.                                                                         uint32_t *pulTimerTaskStackSize)
  76. {
  77.         *ppxTimerTaskTCBBuffer=&TimerTaskTCB;
  78.         *ppxTimerTaskStackBuffer=TimerTaskStack;
  79.         *pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;
  80. }


  81. int main(void)
  82. {
  83.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4                  
  84.         delay_init();                                            //延时函数初始化          
  85.         uart_init(115200);                                        //初始化串口
  86.         LED_Init();                                                          //初始化LED
  87.        
  88.          
  89.     printf("\r\n\r\n");
  90.     printf("--------------------------------------------------------\r\n");
  91.     printf("-- Welcome to FreeRTOS                                  \r\n");
  92.     printf("--------------------------------------------------------\r\n");
  93.        
  94.     //创建开始任务
  95.         StartTask_Handler=xTaskCreateStatic((TaskFunction_t        )start_task,                //任务函数
  96.                                                                                 (const char*         )"start_task",                //任务名称
  97.                                                                                 (uint32_t                 )START_STK_SIZE,        //任务堆栈大小
  98.                                                                                 (void*                           )NULL,                                //传递给任务函数的参数
  99.                                                                                 (UBaseType_t         )START_TASK_PRIO,         //任务优先级
  100.                                                                                 (StackType_t*   )StartTaskStack,        //任务堆栈
  101.                                                                                 (StaticTask_t*  )&StartTaskTCB);        //任务控制块              
  102.     vTaskStartScheduler();          //开启任务调度
  103. }

  104. //开始任务任务函数
  105. void start_task(void *pvParameters)
  106. {
  107.     taskENTER_CRITICAL();           //进入临界区
  108.     //创建TASK1任务
  109.         Task1Task_Handler=xTaskCreateStatic((TaskFunction_t        )task1_task,               
  110.                                                                                 (const char*         )"task1_task",               
  111.                                                                                 (uint32_t                 )TASK1_STK_SIZE,       
  112.                                                                                 (void*                           )NULL,                               
  113.                                                                                 (UBaseType_t         )TASK1_TASK_PRIO,        
  114.                                                                                 (StackType_t*   )Task1TaskStack,       
  115.                                                                                 (StaticTask_t*  )&Task1TaskTCB);       
  116.     //创建TASK2任务
  117.         Task2Task_Handler=xTaskCreateStatic((TaskFunction_t        )task2_task,               
  118.                                                                                 (const char*         )"task2_task",               
  119.                                                                                 (uint32_t                 )TASK2_STK_SIZE,       
  120.                                                                                 (void*                           )NULL,                               
  121.                                                                                 (UBaseType_t         )TASK2_TASK_PRIO,        
  122.                                                                                 (StackType_t*   )Task2TaskStack,       
  123.                                                                                 (StaticTask_t*  )&Task2TaskTCB);
  124.     vTaskDelete(StartTask_Handler); //删除开始任务
  125.     taskEXIT_CRITICAL();            //退出临界区
  126. }
  127. //task1任务函数
  128. void task1_task(void *pvParameters)
  129. {
  130.         u8 task1_num=0;
  131.        
  132.         while(1)
  133.         {
  134.                 task1_num++;        //任务执1行次数加1 注意task1_num1加到255的时候会清零!!
  135.                 LED0=!LED0;
  136.                 printf("任务1已经执行:%d次\r\n",task1_num);
  137.                 if(task1_num==5)
  138.                 {
  139.                         if(Task2Task_Handler != NULL)                //任务2是否存在?       
  140.                         {
  141.                                 vTaskDelete(Task2Task_Handler);        //任务1执行5次删除任务2
  142.                                 Task2Task_Handler=NULL;                        //任务句柄清零
  143.                                 printf("任务1删除了任务2!\r\n");
  144.                         }
  145.                 }
  146.                 vTaskDelay(1000);                           //延时1s,也就是1000个时钟节拍       
  147.         }
  148. }

  149. //task2任务函数
  150. void task2_task(void *pvParameters)
  151. {
  152.         u8 task2_num=0;
  153.        
  154.         while(1)
  155.         {
  156.                 task2_num++;        //任务2执行次数加1 注意task1_num2加到255的时候会清零!!
  157.     LED1=!LED1;
  158.                 printf("任务2已经执行:%d次\r\n",task2_num);
  159.                 vTaskDelay(1000);                           //延时1s,也就是1000个时钟节拍       
  160.         }
  161. }
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
admin 发表于 2018-9-12 05:08 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
GARY0711 发表于 2018-12-1 15:04 | 只看该作者
不错的资料,谢谢分享
回复

使用道具 举报

地板
hwasun 发表于 2018-12-24 16:46 | 只看该作者

不错的资料,谢谢分享
回复

使用道具 举报

5#
huangxw 发表于 2019-1-11 10:07 | 只看该作者
stm32f103c8t6 的RAM比较小,看看堆定义多大。谢谢分享。
回复

使用道具 举报

6#
xtldw 发表于 2019-2-18 10:52 | 只看该作者
报了很多警告,还在处理中
回复

使用道具 举报

7#
xtldw 发表于 2019-2-22 08:31 | 只看该作者
我已经移植好一个全功能的freeRTOS了
回复

使用道具 举报

8#
bo115891 发表于 2019-2-23 00:02 | 只看该作者
嗯,这贴子网站跟codeforge.cn 有相似之处! 不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机. 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

快速回复 返回顶部 返回列表