Part Number: CC1312R
在CC1312例程的基础上做了修改,在程序没有进入升级模式时不启动OAD部分程序,运行一部分功能性应用程序,根据存储标志识别。
应用程序的功能:sensor定时唤醒大核进行数据发送,但是在唤醒过程中发现定时的时间异常,无论设置几秒唤醒一次,都会很快被唤醒(根据观察不到一秒的时间)
目目前设置了10秒唤醒一次



根据你的帖子,很难理解你的问题。如果我误解了什么,请告诉我:
-使用Sensor Controller Studio,您已经为Sensor Controller实现了一个例程,在唤醒M4F之前,它应该等待一定的时间。
-然而,您观察到传感器控制器过早地唤醒了M4F。
那么,我的问题是:
-你是如何观察觉醒的?你确定是传感器控制器唤醒了M4F,而不是其他东西吗?
如果你还没有看过,我建议你看看传感器控制器SimpleLink学院的培训:
是的,我已经在一个普通例程中实现了我得应用程序的所有功能,sensor定时唤醒大核,大核被唤醒后会发出一些数据,发送完成后进入休眠模式(低功耗);
因为我需要在原来的基础上假日OAD空中升级工能,于是我将我得应用程序移植到了OAD例程中,在验证的时候遇到了这个唤醒异常的问题。
我在验证过程中将所有有可能唤醒大核的途径全部屏蔽掉了,仅剩如下
如果我将fwGenQuickAlertInterrupt();这一句屏蔽掉,大核就不会再被唤醒。如果加入该函数,就大核不会按照cfg.threshold=10;fwScheduleTask(cfg.threshold);10秒唤醒一次的周期进行唤醒,而是不停地唤醒,具体周期没有测试,但确定是不足1秒就会大核就会被唤醒。而且无论我将cfg.threshold改成多少对唤醒频率并没有什么影响
你能告诉我你是如何知道设备正在唤醒的吗?是通过监测功耗还是采用其他方法?(即使你从应用中移除其他唤醒诱因,设备仍可能基于电源驱动、射频堆栈或类似机制自行唤醒。)
你能指给我看在Sensor Controller Studio中输入10秒值的位置吗?确定它没有被误认为是10毫秒或10个时钟周期吗?




我使用一模一样的应用程序在rfPacketTx例程中使用了很久了,一直都很正常。也做过很多测试。但是移植到OAD例程里面就出现了这种问题。
即使你从应用中移除其他唤醒诱因,设备仍可能基于电源驱动、射频堆栈或类似机制自行唤醒。
关于这三种可能性如何排除其因素呢?
目前我也只是觉得sensor异常唤醒的可能性比较大。
好的,这样就明白了。
你能指给我看在Sensor Controller Studio中输入10秒值的位置吗?你确定它不会被误认为是10毫秒或10个计数吗?
这里有一个


我们能再次确认确实是传感器控制器唤醒了系统CPU吗?
你发布了一张引脚波形的照片。我猜这是CONFIG_GPIO_LED引脚吗?程序中其他地方没有对它进行切换操作吗?
你能检查一下信号量semScTaskAlert的语法和实现吗?这是一个计数信号量吗?你能查看第一次调用GPIO_write时它被发布了多少次吗?
我非常确认是传感器控制器唤醒了系统CPU,
CONFIG_GPIO_LED这确实是一个引脚,只有在系统CPU被唤醒后运行一次这个引脚会切换高低电平,
我在这里也已经提到了,屏蔽了传感器控制器的初始化,就不会再被唤醒了,一次都没有被唤醒,这是验证是不是被传感器控制器唤醒的最简单最便捷的方法。与其花大量时间寻找其他的唤醒原因的可能性,我个人觉得不如直接屏蔽//sensor_controller_init(COLLECT_TIMER);这个初始化观察是否还会被唤醒;
我得结果是只要传感器控制器没有被初始化(小核不再运行)系统CPU就不再被唤醒了。这不就说明唤醒源就是出在传感器控制器么
//sensor_controller_init(COLLECT_TIMER);sensor初始化函数屏蔽掉,就不会出现异常唤醒了。
semScTaskAlert的
这里是这样写的,移植过来后我尽可能的保持完全不变,因为之前应用程序是验证过的,只是不知道OAD例程是不是真的会影响传感器控制的的运行。
你能查看第一次调用GPIO_write时它被发布了多少次吗