跳过开箱神马的直入主题,文档入门手册神马官方给的很全了,包装盒,板子实物照片,板子功能标识直接截的官方手册里的.
官方包中有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的文档整理了一下附上文档,官方文档还是很齐全仔细的.
引用: Jacktang 发表于 2021-4-9 13:27 谢谢分享 为什么要把hardfault_handler,pendsv_handler,和systick_handler这三个函数,所以要把it.c中的 ...
因为RTT内部已经实现了这三个函数,不删掉会报错
感谢分享!只尝试过FreeRTOS的移植。RTT的移植还没试过~