如何在RW内核环境中添加和运行一个新任务

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
15个帖子/ 0新
最后一篇
hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
如何在RW内核环境中添加和运行一个新任务

亲爱的对话yabo国际娱乐框半导体,

我正在努力将新的用户空间任务添加到多传感器套件DA14585固件中。我是新的RW实时内核,我不知道如何实现一个简单的任务,除了处理一个简单的App SW定时器1秒钟并递增变量值。我不需要消息或任何复杂的地方。

某处是否存在推荐的示例代码或固件代码,我可以激发自己?

此致,

培养皿

关键词:
设备:
hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
我有以下代码。

我有以下代码。从不调用函数clocks_handler()。是因为MSG没有被发送到TASK_CLOCKS任务吗?任务切换过程是由发送消息驱动的吗?

你能帮我吗?

#include "rwip_config.h" static uint32_t unixtime;Int clocks_handler(ke_msg_id_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id);/*默认状态处理程序定义。*/ const struct ke_msg_handler clocks_default_state[] = {{KE_MSG_DEFAULT_HANDLER, (ke_msg_func_t)clocks_handler},};/*指定所有状态通用的消息处理程序。*/ const struct ke_state_handler clocks_default_handler = ke_state_handler (clocks_default_state);/*定义所有任务实例状态的占位符。*/ ke_state_t clocks_state[1] __SECTION_ZERO("retention_mem_area0");//RETENTION MEMORY // Clocks Task Descriptor static const struct ke_task_desc TASK_DESC_CLOCKS = {NULL, &clocks_default_handler, clocks_state, CLOCKS_STATE_MAX, 1};Void swclock_init(Void) {unixtime = 0; // call the kernel function to start a new task ke_task_create(TASK_CLOCKS, &TASK_DESC_CLOCKS); // Initialize Task state ke_state_set(TASK_CLOCKS, CLOCKS_RUNNING); } int clocks_handler(ke_msg_id_t const msgid, void const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id) { static volatile uint8_t i; i++; return (KE_MSG_CONSUMED); };

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
有一次我想送一个假人

一旦我尝试发送伪消息(从App.C模块复制),抓住了Sigtrap异常。在app_entry_point_handler()的开头中添加了消息发送代码。根据例外,似乎没有正确注册。

消息发送代码工件如下:

struct gapm_update_advertise_data_cmd *cmd = KE_MSG_ALLOC(gapm_update_advertise_data_cmd, TASK_CLOCKS, TASK_APP, gapm_update_advertise_data_cmd);cmd - >操作= GAPM_UPDATE_ADVERTISE_DATA;cmd - > adv_data_len = 0;ke_msg_send (cmd);

任务定义枚举在此处进行以下(Task_clocks几乎添加到底):

///任务类型定义enum ke_task_type {//链接层任务任务_llm,task_llc,task_lld,task_dbg,#if(display_support)task_display,#endif //(display_support)task_app,//时钟任务// task_clocks,task_gtl,task_l2cc,// L2CAP控制器任务任务_gattm,// generic属性配置文件管理器任务任务_gattc,// generic属性配置文件控制器任务任务_gapm,//通用访问配置文件管理器Task_RFU_1,Task_RFU_2,Task_RF_3,Task_RFU_4,Task_RFU_5,#如果(use_aes)#define task_aes task_rfu_1 #endif //分配一定数量的配置文件任务_prf_max =(task_rfu_5 + ble_nb_profiles),// cagble时钟任务task_clocks,///任务数_max,task_none = 0xff,};

一旦我在task_app后面的ke_task_type enum中添加了task_clocks,抓住了同一异常sigtrap。

这里有什么问题?

cyibin.
离线
最后一次露面:7个月4周前
职员
加入:2017-12-14 02:48
嗨hwidvorakinfo,

你好hwidvorakinfo.

我会检查一下,并尽快回复你。

布尔

宜宾

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
亲爱的宜宾,有没有

亲爱的宜宾,有什么办法可以帮到我吗?

培养皿

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
你好宜宾,

你好宜宾,

我只想添加函数swclock_init()在module arch_system.c中从system_init()函数调用。在下底部的以下代码中放置swclock_init()调用:

/* ************************************************************************************ * 应用程序初始化  ************************************************************************************ */ // 初始化应用程序#如果(BLE_APP_PRESENT) app_init ();//初始化APP #endif if (user_app_main_loop_callbacks.)app_on_init ! = NULL) user_app_main_loop_callbacks.app_on_init ();/ /初始化lld_sleep lld_sleep_init_func ();#if (use_xtal16m_adaptive_settlement && use_power_optimization) twirq_set_min = TWIRQSET_MIN_XTAL32_TICKS;twirq_set_max = TWIRQSET_MAX_XTAL32_TICKS;twirq_set = TWIRQSET_INIT_XTAL32_TICKS;# endif  /* ************************************************************************************ * XTAL16M调整设置  ************************************************************************************ */ // 修剪和偏见的xtal16 xtal16__trim_init ();#if (CFG_RF_DIAG_INT) //启用TX_EN/RX_EN中断,具体取决于RF操作模式(PLL-LUT/MGC_KMODALPHA和VCO粗校准组合)enable_rf_diag_irq(RF_DIAG_IRQ_MODE_RXTX);# endif / / CFG_RF_DIAG_INT  /* ************************************************************************************ * 内部时钟初始化  ************************************************************************************ */ swclock_init (); /* ************************************************************************************

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
我进一步走了一点

我又前进了一步,但我仍然在拐弯抹角。

我回到了文件。在文档UM-B-079_DA14585_586_SDK_6_SOFTWARE_PLATFORM_REFICE_5V0我找到了以下内容:

内核的核心是在应用程序主循环中运行的调度程序。调度程序检查是否设置了事件并通过调用相应的处理程序为挂起的事件提供服务。事件可以是BLE或timer事件,即两个任务之间的消息。

好的,所以任务调度程序是由事件驱动的。所以让我们开始计时器。我想使用Easy_App_Timer API函数,但此实现仅使用Task_App环境。我不想重写它。所以另一步回来了。而不是任务,我将发起计时器。

静态volatile uint32_t unixtime;静态timer_hnd clocks_timer_handler;Void swclock_init(Void) {unixtime = 0;clocks_timer_handler = app_easy_timer(CLOCKS_PERIOD, clocks_handler);} void clocks_handler(void) {unixtime++;clocks_timer_handler = app_easy_timer(CLOCKS_PERIOD, clocks_handler);返回;};

但这里的问题是将swclock_init()函数调用的函数。

我试过了无效system_init.无效),但是clocks_handler()没有被调用:

#if(ble_app_present)app_init();//初始化应用程序/ * ************************************************************************************** * CAGBLE Internal or RTC clock init ************************************************************************************ */ #if (CAGEM_RTC_CLOCK) rtc_init(); #elif (CAGEM_SW_CLOCK) swclock_init(); #endif #endif

我试过了无效user_iot_app_on_init无效)在user_iot.c模块中,但Clocks_Handler()未调用:

if(getBits16(sys_stat_reg,per_is_down)){periph_init();} Arch_Printf(“\ r \ n \ r \ n \ r \ n ========物联网+启动========);swclock_init();

我尝试了很多地方,但只有一个地方工作:

Void start_advertise_blink(Void) {io_env . env;led_tmr_state = 0;/ / iot_env救出。led_tmr_blinks = 0 xffff;iot_env。led_on_time = ADVERTISE_LED_ON_TIME;iot_env。led_off_time = ADVERTISE_LED_OFF_TIME;如果(iot_env。= EASY_TIMER_INVALID_TIMER){app_easy_timer_cancel(io_env . conf);led_tmr_hndl);} iot_env。led_tmr_hndl = app_easy_timer( ADVERTISE_LED_OFF_TIME, user_led_timer_handler ); swclock_init(); }

在哪里放置我的用户空间函数initializers?我不想与项目进行战斗。我想使它尽可能好,但我不想破解代码并在代码中制作肮脏的东西。

请你帮我解决上述问题和这个问题吗?

此致

培养皿

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
好吧,可能没有帮助

好的,可能没有帮助。我通过设置计时器帮助自己并使定时器处理程序能够为来自BLE任务调度程序下方的主循环调用的另一个函数的标志。它不优雅,它不是很大,但它正在工作。

亲爱的Diyabo国际娱乐alog Semiconductor,你能帮我解决我还有的任务问题吗?

PM_DIALOG.
离线
最后一次露面:1天19小时前
职员
加入:2018-02-08 11:03
嗨hwidvorakinfo,

嗨hwidvorakinfo,

抱歉,但我可能没听到你的问题,不知道发生了什么。我会检查你提供的所有信息,今天我会尽快帮助你。

谢谢,PM_DIALOG.

PM_DIALOG.
离线
最后一次露面:1天19小时前
职员
加入:2018-02-08 11:03
嗨hwidvorakinfo,

嗨hwidvorakinfo,

我正在阅读你以前的评论,我很困惑。你能试着解释你想要完成的事情吗?通常,建议不要修改SDK文件。所有SDK应在SDK内提供。您应该使用我们的app_easy_xxx API。哪个是您对App_easy_Timer的要求?

谢谢,PM_DIALOG.

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
你好PM_Dialog,

你好PM_Dialog,

问题很简单。如何创建与现有应用程序任务一起运行的新任务。整个定时器只是一个解决方法。

培养皿

PM_DIALOG.
离线
最后一次露面:1天19小时前
职员
加入:2018-02-08 11:03
嗨hwidvorakinfo,

嗨hwidvorakinfo,

请记住,DA145XX产品系列不支持多任务功能。DA1468x / da1469x基于实时抢占式操作系统,即具有多任务处理功能的FreErtos。内核是一个非常简单的调度程序,它没有提供与freertos相同的功能。SDK为开始开发自己的应用程序提供了几个API。您应该自己创建任务和处理程序。如果您想自行尝试,请从UM-B-051文档中读取第5.3节。该任务是通过调用ke_task_create()函数来创建的。

谢谢,PM_DIALOG.

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
你好PM_Dialog,

你好PM_Dialog,

谢谢你!

培养皿

mhv_dialog
离线
最后一次露面:3个月3周前
职员
加入:2013-12-06 15:10
你好,

你好,

添加到PM_DIALOG的评论...

在新的RW任务中实现您的功能将只有效益,如果所述任务需要作为多个动态创建的实例运行(甚至那么,您非常可能会更好地运行不是实施一项新任​​务)。如果您的“任务”作为单个实例运行,则应作为主要用户任务的一部分运行它,并节省实现新RW任务的开销和复杂性。任务切换不会用于“免费”。

MHV.

hwidvorakinfo.
离线
最后一次露面:3个月5天前
加入:2019-10-17 06:49
你好MHv_Dialog,

你好MHv_Dialog,

谢谢你的解释。我将RW内核作为运行任务的调度程序。

P.