完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、不知道从什么地方开始学习
鉴于工作原因,使用的MCU是HT32F52352。很不幸,有点冷门,网上资料很少。 而且由于是第一次接触RTOS,所以也不知道从哪里入手。 所以首先百度了RTOS什么好的时候,搜到了威名远扬的uC/OS,大伙都在夸它,我就决定从uC/OS II开始。 第一次嘛,肯定什么都不懂,就觉得跟着视频做就对了。 所以直接在某二次元 网站上观看大佬的视频。 果不其然,基本都是STM32的。不过没关系,慢慢看。 视频一开始都是说uC/OS II厉害在哪里,我听的头头是道。我觉得很有道理,欢迎大家也去听听。 但是我看到视频中,直接从已经移植好的库里面拷贝uC/OS PORT的代码过来直接使用的时候我就蒙了。 上哪找这移植好代码?总不能自己移植吧,说是这么说,试还是得试的,结论就是自己太菜,什么都看不懂,更别说移植。 感谢大佬使我豁达开朗,决定先学习较为简单rt-thread。 所以推荐小白们,如果小白们是STM32玩家,在RTOS的学习上可以浪,有大把资源,各种视频手把手教学。 但如果小白们是的冷门的MCU玩家,在没有先有案例的情况下,还是从简单但RTOS系统开始学。 最后rt-thread在官网上的资料实在是太齐全了,而且还是中文版的,简直是小白们的天堂。 我先去啃了,大家再见。 二、LED线程 低一次上手,菜刀小试了下,写了个线程,感觉和电脑上写软件的线程差不多。 static void my_Led_change(void *param){ OUT_PC14_XOR; } int my_Led_start(){ rt_timer_t timer1 = rt_timer_create("timer1", my_Led_change, RT_NULL, 250, RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER); if (timer1 != RT_NULL) rt_timer_start(timer1); return 0; } int main(void){ GPIO_Configuration(); my_Led_start(); while (1) { rt_thread_mdelay(100); OUT_PC15_XOR; } } 三、输出配置 试了几轮。啃了写代码。发现自己看进展很慢。所以又跑去看视频(二倍速),突然发现RT-thread可以用串口接收命令从而控制线程的是否开启,所以自己摸索的话视频还是要看的。 所以需要配置串口以及rt_kprintf。 首先是rt_kprintf,rt_kprintf实际调用输出的是rt_hw_console_output,但是rt_hw_console_output是个空函数,而且它被__attribute__((weak))修饰,是个弱函数。这个的作用用自己话理解的话就是:可以直接再定义一个非弱函数的rt_hw_console_output来重写原有的rt_hw_console_output。 这个很简单的网上抄了一个丢在board.c。 void rt_hw_console_output(const char *str) { /* empty console output */ rt_enter_critical(); while(*str != 0) { if(*str == 'n') { HT_USART1->DR = 'r'; while ((HT_USART1->SR & USART_FLAG_TXC) == 0); } HT_USART1->DR = *str++; while ((HT_USART1->SR & USART_FLAG_TXC) == 0); } rt_exit_critical(); } 这里rt_enter_critical()是啥我还不知道,下轮再修改补上。 其他的感觉跟一般的重写fputc一样一样的。 然后是usart的配置,但是usart配置完初始化不可以放在main()下面,而是要放在rt_hw_board_init()下面。 原因是rt-thread在main前面已经有输出了,所以得在输出之前初始化。 然后就可以发送数据了。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2956 浏览 16 评论
3457 浏览 1 评论
8995 浏览 16 评论
4050 浏览 18 评论
1103浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 17:47 , Processed in 1.027069 second(s), Total 48, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号