ch582m 在freertos例程的任务中无法对全局变量进行赋值

用的是官方的例程,定义了一个全局变量count1,在任务1中,想对这个全局变量进行++操作,但是发现,没能正常赋值,能确定的是,任务有在周期性的运行。并且还发现在开启任务调度之后,不论添加什么语句,哪怕是对变量赋值,都不会执行。

icon_rar.gifFreeRTOS.zip

还望指教。

加上打印信息确保自加的函数是运行到了,然后定义变量的时候加上volatile修饰,防止被优化。


image.png我在任务一中加入了让电平跳变的代码,然后电平也有正常的变化,也就是程序应该是执行到了这块的,刚我把全局变量前也加入了volatile修饰,接下来,我用usb把日志打印出来,试一下



定时器中断触发时间修改长一些,修改为200ms。

定时器中断太短,同时服务函数的执行时间过长,则出中断又进入了中断函数,这导致一直在执行定时器中断的任务,其他的任务来不及处理。


您好,我刚调试了一下,然后发现了问题的点,但是不知道怎么解决
image.png
在使用freertos例程中,只要我在开启任务后,调用spi的这个函数,就会造成任务无法正确运行,例程有说明中断不需要用__INTERRUPT修饰,只需要用__HIGH_CODE修饰一下就行了,然后我再配置文件中看到了下面这个
image.png
但是我没找到__INTERRUPT定义的地方,卡住了,还请赐教


你猜测是定时器中断时间太短导致的,我直接把定时器中断相关的全部注释掉了,将屏幕显示的函数移到了任务一中
image.png
测试发现,能稳定的进入到任务中,但是不能正确的执行SPI0_MasterSendByte函数,屏幕上没有任何反应。这函数在开启任务前调用,是可以正常执行的


为了进一步验证我的猜测,我将硬件spi改成了软件spi,然后就可以正常的运行了。
image.png

还麻烦看一下硬件spi为啥会跟freertos产生冲突,麻烦了


spi阻塞的发送,rtos是会打断这个while的。


请问,应该怎么解决这个问题呢?麻烦了


运行FreeRTOS系统, 蓝牙模块的TMOS那套代码能跑起来吗?


沁恒的蓝牙例程都是跑的裸机呀,没看到freertos系统下的ble例程,当然也有可能是我没看到


SPI抓包查看数据是否发送成功,如果发送失败就再次调用发送函数。通过抓波形判断。数据填入buffer代表数据就已经代表数据发送出去。

使用蓝牙功能,则使用tmos系统,暂无rtos+ble的资料参考,需要自行开发。


跑系统的话,用DMA吧,否则时序会要命的…


只有登录才能回复,可以选择微信账号登录