打印
[学习笔记]

【Autochips评测】+ AC781X尝试RT-Thread

[复制链接]
903|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天整个RTT在板上跑跑,开发环境是Keil,挺方便使用led_demo
pack中安装好rtt后,直接勾上就可以

编译一下,有三个错误,均是未定义


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

// Holds the system core clock, which is the system clock
// frequency supplied to the SysTick timer and the processor
// core clock.
extern uint32_t SystemCoreClock;

extern char rt_hw_console_getchar(void);


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


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


调试后发现串口没有初始化,且rt_hw_console_output为弱函数
RT_WEAK void rt_hw_console_output(const char *str)
{
    /* empty console output */
}
原以为接收暂时不用可以先空着,没想到发送也是空的
那好办,将这两个函数重写下吧
char rt_hw_console_getchar(void)
{
       
        char ch = -1;
    if (s_debugInit)
    {
        if (UART_RxIsDataReady(DEBUG_UART))
        {
            ch = UART_ReceiveData(DEBUG_UART);
        }
    }
        return ch;
}
void rt_hw_console_output(const char *str)
{
    /* empty console output */
//                printf("%s",str);
       
    /* 进入临界段 */
    rt_enter_critical();

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

        UART_SendData(DEBUG_UART,  *str++ );
        while ( UART_TxIsFinished( DEBUG_UART) == 0);
    }

    /* 退出临界段 */
    rt_exit_critical();
}


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




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


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







使用特权

评论回复

相关帖子

沙发
GrootBrain| | 2021-1-15 15:06 | 只看该作者
MDK直接拿来就用,这个不错哦

使用特权

评论回复
板凳
单片小菜| | 2021-1-15 15:14 | 只看该作者
直接就可以使用吗?楼主是高手,将MDK使用的这么好。

使用特权

评论回复
地板
90houyidai|  楼主 | 2021-1-15 15:19 | 只看该作者
单片小菜 发表于 2021-1-15 15:14
直接就可以使用吗?楼主是高手,将MDK使用的这么好。

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

使用特权

评论回复
5
90houyidai|  楼主 | 2021-1-15 15:21 | 只看该作者
GrootBrain 发表于 2021-1-15 15:06
MDK直接拿来就用,这个不错哦

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

使用特权

评论回复
6
onlycook| | 2021-1-15 16:19 | 只看该作者
MDK直接就可以使用,楼主很棒啊,赞一下

使用特权

评论回复
7
嵌入小菜菜| | 2021-1-15 17:13 | 只看该作者
这个想法确实不错,MDK用的太遛了。

使用特权

评论回复
8
里面有晴雨| | 2021-1-15 17:50 | 只看该作者
才发现,MDK还能这么玩,太棒了,很不错的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

482

帖子

2

粉丝