我需要DSPS程序在主程序运行时运行其他进程,我不确定如何。
例如,我需要PIN 1_0的LED每3秒闪烁,而系统通电。我有PIN配置,我能够在Arch_Main.cn上打开灯,但我不知道如何使用计时器。
如果可能的话,我还需要在某些引脚上持续检查电压。
任何帮助,将不胜感激。
谢谢
嗨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.
嗨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也只运行一次或一旦回调函数完成后它会重置一次?
嗨roninkreinin,
不要在System_Init()中调用App_easy_Timer(),因为此函数执行设备将重置为堆栈,以便重新初始化它,因此无论您发送什么,都将简单地分解堆栈,所以您只需在设备启动广告之前将计时器设置在广告功能中。关于reset_mem_alloc_fail,问题发生在内存时发生,您得到的原因是因为您已插入的线设置了定时器的设置是在BLE堆栈的实际初始化之前,因此堆栈分配的内存尚未分配,如果您在rwip_init()函数之后放置app_easy_timer(),则您不会得到该断言,但是,计时器再次将永远不会触发。关于回调函数的调用,一旦定时器已经过去,您必须再次设置它(使用相同的API),它不会自动重新加载。
嗨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.
嗨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也只运行一次或一旦回调函数完成后它会重置一次?
谢谢
嗨roninkreinin,
不要在System_Init()中调用App_easy_Timer(),因为此函数执行设备将重置为堆栈,以便重新初始化它,因此无论您发送什么,都将简单地分解堆栈,所以您只需在设备启动广告之前将计时器设置在广告功能中。关于reset_mem_alloc_fail,问题发生在内存时发生,您得到的原因是因为您已插入的线设置了定时器的设置是在BLE堆栈的实际初始化之前,因此堆栈分配的内存尚未分配,如果您在rwip_init()函数之后放置app_easy_timer(),则您不会得到该断言,但是,计时器再次将永远不会触发。关于回调函数的调用,一旦定时器已经过去,您必须再次设置它(使用相同的API),它不会自动重新加载。
谢谢mt_dialog.