在DSPS中运行其他进程

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.xmece.com/support.我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
RoniKreinin
离线
最后看到:3年1个月前
加入:2018-01-02为16:10
在DSPS中运行其他进程

我需要DSPS程序运行额外的进程,而主程序运行,我不确定如何。

例如,当系统上电时,我需要引脚1_0的LED每3秒闪烁一次。我有引脚配置,我能够在arch_main.c中打开灯,但我不知道如何使用计时器。

我还需要不断检查某些引脚的电压,如果这是可能的。

任何帮助都将被感激。

谢谢

设备:
MT_dialog
离线
最后看到:4个月10个小时前
工作人员
加入:2015-06-08 34
嗨RoniKreinin,

嗨RoniKreinin,

如果您想在DSPS定期运行时闪烁一个led,那么最好的方法是使用内核计时器,您可以通过app_easy_timer() API使用计时器,设置计时器上有一个例子在大多数SDK示例项目例如ble_app_barebone使用app_easy_timer API来设置一个计时器来更新广告字符串user_app_adv_start()函数,你还会发现信息嗯- b - 051的API文档附录C API的应用程序软件。

您还可以使用相同的实现来读取ADC电压,通过再次使用内核计时器触发ADC读取。

由于MT_dialog

RoniKreinin
离线
最后看到:3年1个月前
加入:2018-01-02为16:10
嗨MT_dialog,

嗨MT_dialog,

我添加了以下代码:

空白power_led_timer_init(空白)

power_led_timer = app_easy_timer(POWER_LED_UPDATE, led_toggle);

静态孔隙led_toggle(空白)

如果(GPIO_GetPinStatus (LED_PORT LED_PIN))
GPIO_SetInactive (LED_PORT LED_PIN);
如果(!GPIO_GetPinStatus (LED_PORT LED_PIN))
GPIO_SetActive (LED_PORT LED_PIN);

与POWER_LED_UPDATE = 300(300*10 = 3秒)。
在GPIO_init() (arch_system.c)之后,我在system_init()中调用了power_led_timer_init(),但是我得到了一个RESET_MEM_ALLOC_FAIL错误。
知道为什么吗?
LED本身是打开的,但不会闪烁(我在GPIO_ConfigurePin中默认是打开的)

另外,app_easy_timer只运行一次,还是在回调函数完成后重置?

谢谢

MT_dialog
离线
最后看到:4个月10个小时前
工作人员
加入:2015-06-08 34
嗨RoninKreinin,

嗨RoninKreinin,

system_init不调用app_easy_timer()()因为这个函数执行后,设备会发出重置到堆栈初始化它,所以无论你已经向堆栈将只是discarted发送,所以你可以简单地设置计时器在广告功能设备启动前的广告。关于RESET_MEM_ALLOC_FAIL,问题发生在你耗尽内存,你得到这个的原因是因为的行插入计时器的设置实际的祝福栈的初始化之前,堆栈的内存分配还没有分配,如果将app_easy_timer()放置在rwip_init()函数之后,将不会得到该断言,但同样不会触发计时器。对于回调函数的调用,只要计时器一过,你就必须重新设置它(使用相同的API),它不会自动重新加载。

由于MT_dialog