信昌 PDC · 产品与技术资料捷比信主站 · 综合产品与服务
信昌 PDC电容与电阻
捷比信产品咨询0755-29796190

实践经验:stm32cubMX自动生成作弊问题(Freertos)

让我们看一下这个程序:上面的程序是串行端口2的中断服务功能。 数据。
这样,该程序得到了很好的保护,并且在执行接收过程期间不会因中断而中断串行端口。但是,如果您不注意,就会感到沮丧。
让我们看一下以下情况。如果使用stm32cubeMX生成代码,我们将看到在main.c中调用了串行端口初始化函数,并且在由代码编写规则定义的区域中定义了信号灯以处理传感器数据。
编程思想似乎没有错,但是灾难将要​​发生,因此我们将这样的段落添加到msp初始化函数中。如果在初始化串行端口后传感器设备未通过串行端口发送数据,则在未触发串行端口接收中断的情况下,幸运的是您的设备可以开机并正常运行。
如果在初始化串行端口后传感器立即向MCU报告数据,您会突然发现设备无法开启?什么?为什么是这样?断点调试后发现问题。我们在这里发送了一个信号量,但是该信号量尚未初始化,对吗? ?让我们跟踪断点,输入函数xSemaphoreGiveFromISR,看看它为什么卡住了?这是一个宏,实际上调用了函数xQueueGiveFromISR。
我们继续跟踪断点。让我们逐步通过以下断言:事实证明我们已经死在这里,这意味着我们没有创建队列句柄。
这是stm32cubeMX给我们带来的欺诈问题。有必要根据其要求定义和编写代码,同时也要防止此类问题的发生。
如何解决这个问题呢?其实,这很简单,只需添加一个标志变量即可。在操作系统启动之前,我们不会让发送信号量的语句执行。
操作系统启动后,让发送信号量的语句执行,否则会带来灾难性后果。在操作系统启动之前,我们尚未使用数据,并且尚未创建信号灯。
目前,不要使用os的信号量发送和接收功能,因此我想到了定义is_use_os变量的解决方案。在此标志为假之前,当os处于运行状态时,此标志为true。
在中断服务函数中判断该标志:这样,在启动os之前,is_use_os变量为false,并且不执行相应的代码。当os启动时,is_use_of变量为true。
让我们看一下os启动,这个变量还是NULL吗?让代码运行到初始化任务中,这也标志着操作系统已经启动。然后将断点放在刚接收到串行端口中断的函数中。
然后走进去看看。这时,我们发现此值不再为NULL。
完美解决问题。上一期关于微控制器的精彩节目的连胜程序的框架。
C语言将xxx.bin文件转换为数组和指针的数组。这是一个非常发人深省的笔试题。
简单易用的事件驱动的密钥驱动程序模块。如果您认为这次共享的文章对您有所帮助,请单击[查找]并转发并共享,这也是我的支持。

相关资料

C语言#和##连接器在项目中的应用(美观)GVT-427B / 417B毫伏表的特性和应用Bang Bang Long:我如何自学技术硬件文章数码相机排名_推荐家用数码相机电动汽车使用法拉德级大容量电容器的问题分析如何通过聘请销售人员来购买智能电视联想发布YOGA 6活页簿:织物面A,R7 4700U全球首款屏下照相手机:中兴AXON 20 5G正面照片发布野火冒出的烟雾笼罩着硅谷!加州进入紧急状态:苹果宣布捐款英特尔发布第二代产品P5800X系列广汽集团:石墨烯电池车已进入量产测试平多多集团购买被拒绝的湖北准车主将起诉特斯拉中国医学影像AI,进入科技创新委员会安捷伦3G无线通信集成测试解决方案Mouser Electronics荣获KEMET 2020亚太地区优质服务分销商奖EM310传输模块示意图电动汽车完全替代燃油汽车的时机已经成熟医疗行业呼叫中心解决方案凯迪集团的视频流解决方案保时捷发布2021 Taycan:新配色方案和更快的速度