在DSPS中运行其他进程

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
ronikreinin.
离线
最后一次露面:2年11个月前
加入:2018-01-02 16:10
在DSPS中运行其他进程

我需要DSPS程序在主程序运行时运行其他进程,我不确定如何。

例如,我需要PIN 1_0的LED每3秒闪烁,而系统通电。我有PIN配置,我能够在Arch_Main.cn上打开灯,但我不知道如何使用计时器。

如果可能的话,我还需要在某些引脚上持续检查电压。

任何帮助,将不胜感激。

谢谢

设备:
mt_dialog.
离线
最后一次露面:2个月3天前
职员
加入:2015-06-08 11:34
嗨ronikreinin,

嗨ronikreinin,

嗯,如果你想眨眼,而DSP以定期运行的时候跑过的LED最好的方法是通过使用内核定时器,你将能够通过App_easy_Timer()API使用定时器,有一个例子在大多数SDK示例中设置计时器示例,例如项目BLE_APP_BAREBONE使用APP_EASY_TIMER API,以便设置计时器以更新USER_APP_ADV_START()函数中的广告字符串,您还将在UM-B中找到有关API的信息-051附录C应用软件API中的文档。

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

谢谢mt_dialog.

ronikreinin.
离线
最后一次露面:2年11个月前
加入:2018-01-02 16:10
嗨mt_dialog,

嗨mt_dialog,

我添加了以下代码:

void power_led_timer_init(void)
{
power_led_timer = app_easy_timer(power_led_update,led_toggle);
}

静态void LED_Toggle(void)
{
if(gpio_getpinstatus(LED_PORT,LED_PIN))
gpio_setinactive(LED_PORT,LED_PIN);
if(!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.
离线
最后一次露面:2个月3天前
职员
加入:2015-06-08 11:34
嗨roninkreinin,

嗨roninkreinin,

不要在System_Init()中调用App_easy_Timer(),因为此函数执行设备将重置为堆栈,以便重新初始化它,因此无论您发送什么,都将简单地分解堆栈,所以您只需在设备启动广告之前将计时器设置在广告功能中。关于reset_mem_alloc_fail,问题发生在内存时发生,您得到的原因是因为您已插入的线设置了定时器的设置是在BLE堆栈的实际初始化之前,因此堆栈分配的内存尚未分配,如果您在rwip_init()函数之后放置app_easy_timer(),则您不会得到该断言,但是,计时器再次将永远不会触发。关于回调函数的调用,一旦定时器已经过去,您必须再次设置它(使用相同的API),它不会自动重新加载。

谢谢mt_dialog.