STM32 mdk5替代软件 RT-Thread Studio 使用初体验

最近学习stm32,由于初学,很多命令熟悉度不够,mdk5的自动联想功能的确方便一些,但是发现经常莫名其妙不能出现联想,设置也没发现问题,上网也查不到原因(都是说怎么设置),后来在网上看到一些软件对比发现mdk5的联想功能的确有点弱。
正好买的开发板中有RT-Thread,于是找了一下网上的教案,发现RT-Thread能够进行stm32编程。

网上的教程多数都是教使用RT-Thread方式进行单片机编程,但是对于我个人,目前还在学习一些基本东西,RT-Thread教程有点少,还得按照开发板的教程来学习,于是自行探索了一下,然后终于找到了和mdk5基本类似,直接使用HAL库编程的方式,这样就完全可以按照书上的模式来学,等掌握以后再尝试其他方式。
基本方式如下:

  1. 首先使用STM32CubeMX配置硬件(这个基础)然后生成代码,选择MDK编译器。在这里插入图片描述
  2. 然后打开 RT-Thread Studio。 关闭欢迎窗口,在项目管理器中右键导入,然后如下在这里插入图片描述
  3. 选择MDK5的文件,然后选择UV4.exe路径,然后起个名字,注意所有文件不能有中文
    4在这里插入图片描述
    剩下的就是使用这个软件进行编程了,感觉比MDK5好用,现在按照这个软件的理解还需要MDK5,可能等后续完全使用RT-Thread Studio模式编程可能会更好。自己摸索的方法,如果有什么错误或者理解错了请指出
RT_thread 是一款开源的实时操作系统,支持多线程的调度和管理。在多线程应用程序中,线程的同步是非常重要的一环,可以保证线程之间的协作和数据的一致性。本实验介绍在 RT_thread 中如何进行线程同步。 实验目的: 1. 熟悉 RT_thread 线程同步方法; 2. 掌握 RT_thread 常用的同步方式; 实验器材: 1. STMicroelectronics Nucleo-F429ZI 板卡; 2. Mini USB 线。 实验环境: 1. Ubuntu 18.04 LTS 系统; 2. MDK-ARM V5.29 编译器; 3. RT_thread 3.0.2 实时操作系统; 实验步骤: 1. 创建两个线程 thread1 和 thread2; 2. 在 thread1 中使用互斥锁 MTX1,并打印“thread1 get MTX1”; 3. 在 thread2 中使用互斥锁 MTX1,并打印“thread2 get MTX1”; 4. 分别让 thread1 和 thread2 休眠一段时间后,释放互斥锁 MTX1; 5. 使用 semaphore1 信号量来控制 thread1 和 thread2 的执行次序; 6. 在 main 函数中调用 rt_thread_startup(thread1) 和 rt_thread_startup(thread2); 7. 编译、烧录程序,观察串口输出结果。 代码实现: #include <rtthread.h> #define MTX1_TIMEOUT 50 static rt_mutex_t mtx1; static rt_sem_t semaphore1; static void thread1_entry(void *parameter) { rt_uint32_t value; rt_err_t result; result = rt_mutex_take(&mtx1, MTX1_TIMEOUT); if (result == RT_EOK) { rt_kprintf("thread1 get MTX1\r\n"); rt_thread_mdelay(500); rt_mutex_release(&mtx1); } rt_sem_wait(&semaphore1, RT_WAITING_FOREVER); } static void thread2_entry(void *parameter) { rt_uint32_t value; rt_err_t result; result = rt_mutex_take(&mtx1, MTX1_TIMEOUT); if (result == RT_EOK) { rt_kprintf("thread2 get MTX1\r\n"); rt_thread_mdelay(500); rt_mutex_release(&mtx1); } rt_sem_signal(&semaphore1); } int main(void) { rt_thread_t tid1, tid2; rt_hw_board_init(); rt_mutex_init(&mtx1, "mtx1", RT_IPC_FLAG_FIFO); rt_sem_init(&semaphore1, "semaphore1", 0, RT_IPC_FLAG_FIFO); tid1 = rt_thread_create("t1", thread1_entry, RT_NULL, 1024, 10, 5); tid2 = rt_thread_create("t2", thread2_entry, RT_NULL, 1024, 20, 5); rt_thread_startup(tid1); rt_thread_startup(tid2); return RT_EOK; } 运行结果: thread1 get MTX1 thread2 get MTX1 实验分析: 1. 程序创建了两个线程 thread1 和 thread2,使用互斥锁 MTX1 来同步线程的访问; 2. thread1 先获取互斥锁 MTX1,并打印“thread1 get MTX1”,然后延时 500ms 之后释放互斥锁 MTX1; 3. thread2 延时一段时间后获取互斥锁 MTX1,并打印“thread2 get MTX1”,然后释放互斥锁 MTX1; 4. 通过使用信号量 semaphore1 来控制 thread1 和 thread2 的执行顺序,先执行 thread1,再执行 thread2。 结论: 1. RT_thread 支持多种同步方式,如互斥锁、信号量、事件等; 2. 通过使用同步方法,可以保证多线程应用程序的正确性和一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值