一、不知道从什么地方开始学习
鉴于工作原因,使用的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前面已经有输出了,所以得在输出之前初始化。
然后就可以发送数据了。

一、不知道从什么地方开始学习
鉴于工作原因,使用的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前面已经有输出了,所以得在输出之前初始化。
然后就可以发送数据了。

举报