搜索

[学习笔记] 【Autochips评测】+ AC781X尝试RT-Thread

[复制链接]
167|7
 楼主 | 2021-1-15 15:02 | 显示全部楼层 |阅读模式
AC, ps, ip, ck
今天整个RTT在板上跑跑,开发环境是Keil,挺方便使用led_demo
pack中安装好rtt后,直接勾上就可以
综合6.jpg
编译一下,有三个错误,均是未定义
综合1.jpg

分别是时钟配置和字符获取,全局搜索下
找到需要的类型
  1. // Updates the variable SystemCoreClock and must be called
  2. // whenever the core clock is changed during program execution.
  3. extern void SystemCoreClockUpdate(void);

  4. // Holds the system core clock, which is the system clock
  5. // frequency supplied to the SysTick timer and the processor
  6. // core clock.
  7. extern uint32_t SystemCoreClock;
复制代码

  1. extern char rt_hw_console_getchar(void);
复制代码


AC78XX的.s启动文件中进行SystemInit时已经对时钟初始化过了
先将SystemCoreClockUpdate、rt_hw_console_getchar两个函数创建为空的函数
而SystemCoreClock内核时钟根据SystemInit中进行推算

综合5.jpg
mdelay替换成rt_thread_mdelay
编译后无错误,download进开发板,发现LED有闪烁但是控制台没有打印


调试后发现串口没有初始化,且rt_hw_console_output为弱函数
  1. RT_WEAK void rt_hw_console_output(const char *str)
  2. {
  3.     /* empty console output */
  4. }
复制代码
原以为接收暂时不用可以先空着,没想到发送也是空的
那好办,将这两个函数重写下吧
  1. char rt_hw_console_getchar(void)
  2. {
  3.        
  4.         char ch = -1;
  5.     if (s_debugInit)
  6.     {
  7.         if (UART_RxIsDataReady(DEBUG_UART))
  8.         {
  9.             ch = UART_ReceiveData(DEBUG_UART);
  10.         }
  11.     }
  12.         return ch;
  13. }
  14. void rt_hw_console_output(const char *str)
  15. {
  16.     /* empty console output */
  17. //                printf("%s",str);
  18.        
  19.     /* 进入临界段 */
  20.     rt_enter_critical();

  21.     /* 直到字符串结束 */
  22.     while ( *str != '\0' )
  23.     {
  24.         /* 换行 */
  25.         //RT-Thread 系统中已有的打印均以 \n 结尾,而并非 \r\n,所以在字符输出时,需要在输出 \n 之前输出 \r,完成回车与换行,否则系统打印出来的信息将只有换行
  26.         if ( *str == '\n' )
  27.         {
  28.            
  29.                                                 UART_SendData(DEBUG_UART, '\r' );
  30.             while ( UART_TxIsFinished( DEBUG_UART) == 0 );
  31.         }

  32.         UART_SendData(DEBUG_UART,  *str++ );
  33.         while ( UART_TxIsFinished( DEBUG_UART) == 0);
  34.     }

  35.     /* 退出临界段 */
  36.     rt_exit_critical();
  37. }
复制代码


这样就可以正常发送接收了吧
天不遂人愿,堆栈溢出了
好吧,继续修改栈大小
综合3.jpg

综合4.jpg

这下终于OK了,控制台有输入输出了,LED也愉快的闪起来了
综合2.jpg

最后总结,这种方式只适用于像我这种初学RTOS的,进行简单的工程建立体验RTT
不建议在实际开发中,实际开发中还请使用 env 和 scons辅助工具来裁剪功能和组织文件







使用特权

评论回复
| 2021-1-15 15:06 | 显示全部楼层
MDK直接拿来就用,这个不错哦

使用特权

评论回复
| 2021-1-15 15:14 | 显示全部楼层
直接就可以使用吗?楼主是高手,将MDK使用的这么好。

使用特权

评论回复
 楼主 | 2021-1-15 15:19 | 显示全部楼层
单片小菜 发表于 2021-1-15 15:14
直接就可以使用吗?楼主是高手,将MDK使用的这么好。

MDK上使用的还是RT-thread nano,尝鲜还是可以的

使用特权

评论回复
 楼主 | 2021-1-15 15:21 | 显示全部楼层
GrootBrain 发表于 2021-1-15 15:06
MDK直接拿来就用,这个不错哦

勾勾就对了,有大神推荐使用MDK自己的RTOS——RTX,据说是实时性、效率比rtt和freertos高

使用特权

评论回复
| 2021-1-15 16:19 | 显示全部楼层
MDK直接就可以使用,楼主很棒啊,赞一下

使用特权

评论回复
| 2021-1-15 17:13 | 显示全部楼层
这个想法确实不错,MDK用的太遛了。

使用特权

评论回复
| 2021-1-15 17:50 | 显示全部楼层
才发现,MDK还能这么玩,太棒了,很不错的。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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