[ 雅特力AT-START-F421]评测 移植RTT

eew_Violet   2021-4-8 23:37 楼主

            跳过开箱神马的直入主题,文档入门手册神马官方给的很全了,包装盒,板子实物照片,板子功能标识直接截的官方手册里的.

       

        官方包中有IAR和MDK的支持包,用法官方文档也写了,这里不再阐述.附官网地址雅特力  OK

        接下来先移植下RT-Thread吧.虽然官方也给了FreeRTOS的demo参考.

        先介绍下RT-Thread吧!  RT-Thread是一个优秀的国产RTOS,免费,开源,代码可剪裁,且有丰富的硬件驱动和配套的柿饼UI界面.

          这里我是基于官方UART例程中,printf工程移植的.使用MDK.有两种方法移植.第一种去RTT官网或Gitee或Github下载源代码,附官网链接.RT-Thread.org,然后只提取需要的文件到MDK工程中,然后就是在MDK中新建组和添加文件了.还有简单的第二种,可以直接在MDK的pack installer中安装RTT包,然后manage run-time environment中勾选就行了.不论哪一种到这里RTT代码已经添加到工程中了.接下来做的都一样了.

          先编译一下吧!这里会有三个报错,这是因为RTT在内部已经实现了hardfault_handler,pendsv_handler,和systick_handler这三个函数,所以要把it.c中的这三个函数删掉.再编译就没错了.

        此外uart初始化要在board.c中void rt_hw_board_init()函数中初始化,main.c里的要删除.还需要在board.c添加.h,如下图:main.c中添加#include <rtthread.h>

        board.c中还需要重写void rt_hw_console_output(const char *str)函数以实现串口打印,

		/*实现 finsh 组件输出一个字符*/
void rt_hw_console_output(const char *str)
{
    rt_size_t i = 0, size = 0;
    char a = '\r';

    size = rt_strlen(str);
    for (i = 0; i < size; i++)
    {
        if (*(str + i) == '\n')
        {
            USART_SendData(AT32_PRINT_UART,a);
        }
       USART_SendData(AT32_PRINT_UART,*(str + i));
			 while ( USART_GetFlagStatus(AT32_PRINT_UART, USART_FLAG_TRAC) == RESET );  
    }
}

      因为用了rtos,main就变成了它的一个线程,所以while(1)里一定要有释放CPU的操作,否则调度器就无法切换.如下:

int main(void)
{     


  while (1)
  {
	 	rt_kprintf("ARTERY\n");
		rt_kprintf("AT32F421\n");
		return 0;
  }
}

        到这里基本就已移植完成,编译一下,无报错就可以烧录了,link配置方法官方文档里也有详细说明.串口打印信息如下:

        板卡link已虚拟一个串口并连接到uart1,串口助手配置好后,复位一下就可以看到打印信息.到此说明RTT已移植成功.

 

        我把官方F421的文档整理了一下附上文档,官方文档还是很齐全仔细的.

        AT_F421_Doc.7z

  • 微信图片_20210408222652.jpg
  • pack.PNG
  • bo.PNG
  • 芯片包.PNG
  • rtos.PNG
  • mdk.PNG
  • 再次编译.PNG
  • board.PNG
  • com.PNG

回复评论 (5)

谢谢分享

为什么要把hardfault_handler,pendsv_handler,和systick_handler这三个函数,所以要把it.c中的这三个函数删掉呢

点赞  2021-4-9 13:27

排版有点乱~

gitee/casy
点赞  2021-4-9 19:33
引用: Jacktang 发表于 2021-4-9 13:27 谢谢分享 为什么要把hardfault_handler,pendsv_handler,和systick_handler这三个函数,所以要把it.c中的 ...

因为RTT内部已经实现了这三个函数,不删掉会报错

点赞  2021-4-9 22:43

感谢分享!只尝试过FreeRTOS的移植。RTT的移植还没试过~

点赞  2021-4-10 16:38

6楼 nmg 

帖子里图片太神奇了,小的啊,你是从word里粘贴复制形式发帖吗?

给我一下你的word,论坛现在正在测试这块的功能

点赞  2021-4-14 16:57
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复