[AT32F407] 【AT-START-F407测评】 移植 RTX5 点亮LED

[复制链接]
1628|3
 楼主| BinWin 发表于 2021-2-22 23:00 | 显示全部楼层 |阅读模式
     过去了这么久,现在才拿起些许灰尘的AT32,白色的板子倒是几分熟悉感,整体看一下,USB, FLASH,ETH比较着重的几点,这款MCU作为数据通信来用应该比较合适。
     进入正题,首先准备一个基本工程。这里直接使用BSP文件中的Templates工程模板。在RTE环境中已源码形式添加RTX即可, 左下角的按钮可以方便的解决缺少组件的问题。如图,然后点击OK
      g.png
     这时候选择编译一下,看看有哪些错误,比如
  1. error:  #35: #error directive: "Unknown Arm Architecture!"
   这是由于使用了固件库文件中的cmsis_armcc.h,打开BSP\AT32F4xx_StdPeriph_Lib_V1.2.9\Libraries\CMSIS\CM4\CoreSupport文件夹,把同名文件改名字或删除    a.png
    这时候再编译,上面说的错误已经消失了。然而还是有错误信息存在
    b.png
   这个问题确实不好查,百度后竟有朋友遇到相同的问题,修改方式是这样的
    c.png
   接下来不出意外依然是有问题的,这个比较常见了,重复的中断定义,注释固件库中的中断服务函数掉即可。
   d.png
  到这里,系统已经没问题了,RTX成功的加入到了工程代码中,再做一些基本配置,整体是这样的
   h.png e.png
  剩下的事情就是编写应用代码了,点灯是必经之路,创建两个任务线程,一个LED闪烁,使用相对延时方式。一个串口打印任务,波特率9600。代码可以是这样的
  1. /*----------------------------------------------------------------------------
  2. * CMSIS-RTOS 'main' function template
  3. *---------------------------------------------------------------------------*/

  4. #include "RTE_Components.h"
  5. #include  CMSIS_device_header
  6. #include "cmsis_os2.h"

  7. #include "at32_board.h"
  8. #include <stdio.h>

  9. const osThreadAttr_t ThreadLED_Attr =
  10. {
  11.         .name = "osRtxLEDThread",
  12.         .attr_bits = osThreadDetached,
  13.         .priority = osPriorityHigh2,
  14.         .stack_size = 512,
  15. };

  16. const osThreadAttr_t ThreadMsg_Attr =
  17. {
  18.         .name = "osRtxMsgThread",
  19.         .attr_bits = osThreadDetached,
  20.         .priority = osPriorityHigh3,
  21.         .stack_size = 1024,
  22. };

  23. const osThreadAttr_t ThreadStart_Attr =
  24. {
  25.         .name = "osRtxStartThread",
  26.         .attr_bits = osThreadDetached,
  27.         .priority = osPriorityHigh4,
  28.         .stack_size = 2048,
  29. };

  30. osThreadId_t ThreadIdTaskMsg = NULL;
  31. osThreadId_t ThreadIdTaskLED = NULL;
  32. osThreadId_t ThreadIdStart = NULL;


  33. void AppTaskLED(void *argument)
  34. {
  35.         const uint16_t usFrequency = 500; /* ÑÓ³ÙÖÜÆÚ */
  36.         uint32_t tick;

  37.         /* »ñÈ¡µ±Ç°Ê±¼ä */
  38.         tick = osKernelGetTickCount();

  39.        
  40.     while(1)
  41.     {
  42.                 AT32_LEDn_Toggle(LED2);
  43.                 /* Ïà¶ÔÑÓ³Ù */
  44.                 tick += usFrequency;                          
  45.                 osDelayUntil(tick);
  46.     }

  47. }

  48. void AppTaskMsg(void *argument)
  49. {
  50.         while(1)
  51.         {
  52.                 printf("\n\rUSART Printf Example: retarget the C library printf function to the USART\n\r");
  53.                 osDelay(1000);
  54.         }       
  55. }

  56. static void AppTaskCreate (void)
  57. {
  58.         ThreadIdTaskLED = osThreadNew(AppTaskLED, NULL, &ThreadLED_Attr);
  59.         ThreadIdTaskMsg = osThreadNew(AppTaskMsg, NULL, &ThreadMsg_Attr);         
  60. }

  61. void AppTaskStart(void *argument)
  62. {
  63.         const uint16_t usFrequency = 1; /* ÑÓ³ÙÖÜÆÚ */
  64.         uint32_t tick;
  65.        

  66.         AT32_Board_Init();

  67.         /* ´´½¨ÈÎÎñ */
  68.         AppTaskCreate();

  69.         /* »ñÈ¡µ±Ç°Ê±¼ä */
  70.         tick = osKernelGetTickCount();
  71.        
  72.     while(1)
  73.     {
  74.                
  75.                 /* Ïà¶ÔÑÓ³Ù */
  76.                 tick += usFrequency;                          
  77.                 osDelayUntil(tick);
  78.     }
  79. }



  80. int main (void) {

  81.   // System Initialization
  82.   SystemCoreClockUpdate();
  83.   // ...
  84.   
  85.        
  86.   osKernelInitialize();                 // Initialize CMSIS-RTOS
  87.        
  88.        
  89.        
  90.   ThreadIdStart = osThreadNew(AppTaskStart, NULL, &ThreadStart_Attr);  
  91.        
  92.   osKernelStart();                      // Start thread execution
  93.   for (;;) {}
  94. }
    然后编译下载就可以看到串口助手愉快的输出信息了。
    f.png
   为止,AT32F407可以正常运行RTX内核了,接下来移植网络中间件。


     

xrb3115 发表于 2021-2-24 01:12 | 显示全部楼层
  支持一下,这个网络协议栈应该还是挺好的  
caizhiwei 发表于 2021-2-24 08:39 | 显示全部楼层
xrb3115 发表于 2021-2-24 01:12
支持一下,这个网络协议栈应该还是挺好的

这个明明是RTOS,不是网络协议栈
xrb3115 发表于 2021-2-24 11:30 | 显示全部楼层
caizhiwei 发表于 2021-2-24 08:39
这个明明是RTOS,不是网络协议栈

楼主不是准备继续移植网络中间件嘛,我是说这个协议栈挺好的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

65

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部