点点滴滴学习STM32单片机系列 (一)

本博客的所有原创文章采用创作公用版协议。要求署名、非商业用途和保持一致。要求署名必须包含我的网名(geokai)以及文章来源(选择博客首地址或者具体博文地址)。

商业性使用须预先征得本人同意(发送Email到 geokai@126.com).

 

今天开启一个新的系列.写一点单片机的学习心得.单片机记录一些自己学习和代码编写过程中遇到的问题以及机的解决办法.自己能力非常有限,可能很多问题的解决都没有到点.所以如果您有一些见解可以回复我或者给我发送邮件交流.

这个系列可能要开好几个大章节,每次的更新可能会有交叉,如果对每个章节有兴趣可以翻翻上下文.

 

 

一.RTOS(CMSIS-RTOS, FreeRTOS)

  实时操作系统是必须要掌握的,随着单片机执行的功能越来越复杂.需要通信芯片的增多,程序结构的实时性要求的提高.RTOS是避不开必须要学习和使用的.FreeRTOS的视频多如牛毛,自己早先也学习了一些一些基于标准库的.但是STM似乎放弃标准库,改成HAL库.本来挺抵触HAL库的,毕竟先入为主了标准库.但是当亲身试用CUBEMX,CMSIS包后发现是真心方便.于是开始一段新的学习历程.CubeMX配置试用freertos后,程序会自动为工程添加freertos文件.可是空的main文件提供的确实osKernelInitialize(),osKernelStart(),osThreadCreat()这样的os函数.不应该是vTaskxxxx()这样的么.通过查阅资料得知,Keil认为FreeRTOS函数命名以及各种定义不够人性化,于是对FreeRTOS又进行了一遍封装.基本上全部函数都进行了重新定义,具体的函数可以看CMSIS-RTOS的官方文档.  http://www.keil.com/pack/doc/cmsis/RTOS/html/modules.html

  看到CMSIS的官方文档,瞬间就被这友好的文档给吸引了,这逻辑结构非常清晰.创建进程,创建定时器,线程操作,信号以及线程之间的数据资源共享接口.仔细阅读后让我对单片机的RTOS有了更多的了解.以后称CMSIS-RTOS为RTOS.

  1.RTOS与PyQt

    同时学习RTOS以及PyQt时会发现很多相似的地方.对比起来学习会很有意思.

    a.将系统的主进程osKernelStart以及main()下面的死循环------看成是QMainWindow.show()

      正常我们在写GUI的时候如果不用来执行复杂的任务一个进程就好.即不再使用QThread生成额外进程.

    b.生成一个新的进程首先定义一个进程函数,而后生成函数的进程,而后将进程加入系统.

        void Thread_1 (void const *arg);

        osThreadDef (Thread_1, osPriorityNormal, 1, 0);

        osThreadCreate (osThread (Thread_1), NULL);

        通过以上三步创建了一个进程

    对应到PyQt也对应着这三步,定义一个进程的类同时编写这个类的主运行函数,实例化这个类,执行这个实例.

        第一步

        class Thread_1(QThread):

          def __init__(self, parent=None):

            #初始化的程序

          def run(self):

            #线程主程序

        第二步 在主窗口程序的_init__()程序中

          self.t1 = Thread_1(self)

        第三步 在主窗口陈旭的初始化位置,或者特定位置执行

          t1.start()

    看了以上这些是不是对RTOS又有了一些新的理解.

 

 

#下一篇学习一些进程间数据资源共享的内容

 

          

      

posted @ 2018-09-08 12:16  geokai  阅读(490)  评论(0编辑  收藏  举报