亲爱的对话雷竞技电竞平台框半导体,
我正在将新的用户空间任务添加到多传感器套件DA14585固件中。我是RW实时内核的新手,我不知道如何实现哪怕是一个简单的任务,除了处理一个简单的应用软件计时器1秒并增加一个变量值之外,什么都不做。我不需要信息或任何复杂的东西在这里。
是否存在我可以启发自己的推荐示例代码或固件代码?
最好的问候,
彼得
我有以下代码。永远不会调用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");//保留内存//时钟任务描述符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); };
在我尝试发送一条伪消息(从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);
任务定义枚举如下(任务时钟几乎添加在末尾):
///任务类型定义枚举KE_任务类型{//Link Layer Tasks TASK_LLM,TASK_LLD,TASK_LLD,TASK_DBG,#if(显示支持)TASK_DISPLAY,#endif//(显示支持)任务应用程序、//时钟任务//时钟任务、任务GTL、任务L2CC、//L2CAP控制器任务GATTM、//通用属性配置文件管理器任务GATTC、//通用属性配置文件控制器任务GAPM、//通用访问配置文件管理器任务GAPC、//通用访问配置文件控制器任务RFU 1、任务RFU 2、任务RFU 3、任务RFU 4、任务RFU 5,#如果(使用#AES)#定义任务#AES任务#RFU任务#1#endif//分配一定数量的配置文件任务任务任务任务任务任务任务#PRF#MAX=(任务#RFU 5+BLE#NB#配置文件),//可调整时钟任务任务任务#时钟,///任务的最大数量任务#任务#最大,任务#无=0xFF,};
当我在TASK_应用程序后面的KE_TASK_类型枚举中添加TASK_时钟时,捕获到了相同的异常信号陷阱。
这里怎么了?
你好hwidvorakinfo,
我会在我这边检查一下,然后尽快给你回复。
溴
宜宾
亲爱的宜宾,有什么办法可以帮到我吗?
宜宾你好,,
我只想添加函数swclock_init()正在从模块arch_system.c的system_init()函数被调用。下面的代码将swclock_init()调用放置在底部:
/* ************************************************************************************ * 应用程序初始化 ************************************************************************************ */ // 初始化应用程序#如果(BLE_APP_PRESENT) app_init ();//初始化APP #endif if (user_app_main_loop_callbacks. user_name)app_on_init ! = NULL) user_app_main_loop_callbacks.app_on_init ();/ /初始化lld_sleep lld_sleep_init_func ();#if (use_xtal16m_adaptive_setting && USE_POWER_OPTIMIZATIONS) 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 (); /* ************************************************************************************
我又走了一步,但我还是绕圈子。
我回到文档中。在文档UM-B-079_DA14585_586_SDK_6_Software_Platform_Reference_5v0中我发现了这个:
内核的核心是在应用程序的主循环中运行的调度器。调度程序检查是否设置了事件并通过调用相应的处理程序为挂起事件提供服务。事件可以是BLE事件或定时器事件,两个任务之间的消息。
任务调度程序是由事件驱动的。让我们开始一个计时器。我想使用easy_app_timer API函数,但是这个实现只使用TASK_APP环境。我不想重写它。所以再退一步。而不是一个任务,我将启动计时器。
Static 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()函数调用放在哪里。
我试过了无效系统初始化(无效),但没有调用clocks_handler():
#如果(BLE_APP_PRESENT) app_init ();/ /初始化应用程序 /* ************************************************************************************ * CAGBLE内部或RTC时钟初始化 ************************************************************************************ */ # 如果CAGEM_RTC_CLOCK rtc_init ();# elif (CAGEM_SW_CLOCK) swclock_init ();# endif # endif
我试过了无效user_iot_app_on_init(无效)在user_iot.c模块中,但未调用时钟处理程序():
如果(GetBits16(SYS_STAT_REG,PER_IS_DOWN)){periph_init()}arch_printf(“\r\n\r\n\r\n=IoT+STARTED=IoT=”;swclock_init();
我尝试了很多地方,但只有一个地方有效:
Void start_advertise_blink(Void) {iot_env. txt;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。{app_easy_timer_cancel(iot_env. value);led_tmr_hndl);} iot_env。led_tmr_hndl = app_easy_timer( ADVERTISE_LED_OFF_TIME, user_led_timer_handler ); swclock_init(); }
在哪里放置我的用户空间函数初始值设定项?我不想与项目打交道。我想让它尽可能好,但我不想破解代码,在代码中制造肮脏的东西。
请你帮我回答上面的问题和这个问题好吗?
顺致敬意,
好的,可能不会有帮助。我通过设置一个计时器来帮助自己,计时器处理程序为从BLE任务调度器正下方的主循环调用的另一个函数启用了一个标志。它并不优雅,也不伟大,但它正在工作。
亲爱的Di雷竞技电竞平台alog半导体,你能帮我解决我还有的任务问题吗?
嗨hwidvorakinfo,
抱歉,我可能没听清你的问题,不知道发生了什么。我会检查你提供的所有信息,我会在今天尽快帮助你。
谢谢,下午好
我在读你之前的评论,我有点困惑。你能解释一下你想要完成什么吗?一般情况下,不建议修改SDK文件。所有SDK都应该按照SDK中提供的方式使用。你应该使用我们的app_easy_xxx api。您对app_easy_timer的要求是什么?
你好PM_Dialog,
问题很简单。如何创建与现有应用程序任务一起运行的新任务。整个计时器只是一个变通方法。
请记住,DA145xx产品系列不支持多任务处理功能。DA1468x/DA1469x基于实时抢占式操作系统,即具有多任务处理功能的FreeRTOS。内核是一个非常简单的调度程序,它不提供与FreeRTOS相同的功能。SDK提供两个API开始开发您自己的应用程序。您不应该自己创建任务和处理程序。如果您想自己进行实验,请阅读UM-B-051文档中的第5.3节。该任务是通过调用ke_task_create()函数创建的。
谢谢你!
你好
要添加到PM_对话框的注释。。。
只有当任务需要作为多个动态创建的实例运行时,在新的RW任务中实现您的功能才会有好处(即使这样,您也很可能更好不执行新任务)。如果您的“任务”作为单个实例运行,那么您应该将其作为主用户任务的一部分运行,并节省因实现新RW任务而产生的开销和复杂性。任务切换不是免费的。
MHv
你好MHv_Dialog,
谢谢你的解释。我将RW内核作为运行任务的调度程序。
P。
我有以下代码。永远不会调用clocks_handler()函数。是否因为没有任何MSG被发送到TASK_CLOCKS任务?任务切换过程是由发送消息驱动的吗?
你能帮我吗?
在我尝试发送一条伪消息(从app.c模块复制)时,捕获到SIGTRAP异常。消息发送代码添加在app_entry_point_handler()的开头。根据异常,似乎有东西没有正确注册。
消息发送代码构件如下:
任务定义枚举如下(任务时钟几乎添加在末尾):
当我在TASK_应用程序后面的KE_TASK_类型枚举中添加TASK_时钟时,捕获到了相同的异常信号陷阱。
这里怎么了?
你好hwidvorakinfo,
我会在我这边检查一下,然后尽快给你回复。
溴
宜宾
亲爱的宜宾,有什么办法可以帮到我吗?
彼得
宜宾你好,,
我只想添加函数swclock_init()正在从模块arch_system.c的system_init()函数被调用。下面的代码将swclock_init()调用放置在底部:
我又走了一步,但我还是绕圈子。
我回到文档中。在文档UM-B-079_DA14585_586_SDK_6_Software_Platform_Reference_5v0中我发现了这个:
内核的核心是在应用程序的主循环中运行的调度器。调度程序检查是否设置了事件并通过调用相应的处理程序为挂起事件提供服务。事件可以是BLE事件或定时器事件,两个任务之间的消息。
任务调度程序是由事件驱动的。让我们开始一个计时器。我想使用easy_app_timer API函数,但是这个实现只使用TASK_APP环境。我不想重写它。所以再退一步。而不是一个任务,我将启动计时器。
但是这里的问题是将swclock_init()函数调用放在哪里。
我试过了无效系统初始化(无效),但没有调用clocks_handler():
我试过了无效user_iot_app_on_init(无效)在user_iot.c模块中,但未调用时钟处理程序():
我尝试了很多地方,但只有一个地方有效:
在哪里放置我的用户空间函数初始值设定项?我不想与项目打交道。我想让它尽可能好,但我不想破解代码,在代码中制造肮脏的东西。
请你帮我回答上面的问题和这个问题好吗?
顺致敬意,
彼得
好的,可能不会有帮助。我通过设置一个计时器来帮助自己,计时器处理程序为从BLE任务调度器正下方的主循环调用的另一个函数启用了一个标志。它并不优雅,也不伟大,但它正在工作。
亲爱的Di雷竞技电竞平台alog半导体,你能帮我解决我还有的任务问题吗?
嗨hwidvorakinfo,
抱歉,我可能没听清你的问题,不知道发生了什么。我会检查你提供的所有信息,我会在今天尽快帮助你。
谢谢,下午好
嗨hwidvorakinfo,
我在读你之前的评论,我有点困惑。你能解释一下你想要完成什么吗?一般情况下,不建议修改SDK文件。所有SDK都应该按照SDK中提供的方式使用。你应该使用我们的app_easy_xxx api。您对app_easy_timer的要求是什么?
谢谢,下午好
你好PM_Dialog,
问题很简单。如何创建与现有应用程序任务一起运行的新任务。整个计时器只是一个变通方法。
彼得
嗨hwidvorakinfo,
请记住,DA145xx产品系列不支持多任务处理功能。DA1468x/DA1469x基于实时抢占式操作系统,即具有多任务处理功能的FreeRTOS。内核是一个非常简单的调度程序,它不提供与FreeRTOS相同的功能。SDK提供两个API开始开发您自己的应用程序。您不应该自己创建任务和处理程序。如果您想自己进行实验,请阅读UM-B-051文档中的第5.3节。该任务是通过调用ke_task_create()函数创建的。
谢谢,下午好
你好PM_Dialog,
谢谢你!
彼得
你好
要添加到PM_对话框的注释。。。
只有当任务需要作为多个动态创建的实例运行时,在新的RW任务中实现您的功能才会有好处(即使这样,您也很可能更好不执行新任务)。如果您的“任务”作为单个实例运行,那么您应该将其作为主用户任务的一部分运行,并节省因实现新RW任务而产生的开销和复杂性。任务切换不是免费的。
MHv
你好MHv_Dialog,
谢谢你的解释。我将RW内核作为运行任务的调度程序。
P。