增加rtk process栈空间

重写decode部分
根据观测值数量分配rtkpos所需内存
This commit is contained in:
fize 2022-06-30 15:28:02 +08:00
parent ee1f95ef51
commit c5a5c396f1
11 changed files with 155 additions and 107 deletions

22
.config
View File

@ -17,7 +17,9 @@ CONFIG_RT_USING_HOOK=y
CONFIG_RT_USING_IDLE_HOOK=y CONFIG_RT_USING_IDLE_HOOK=y
CONFIG_RT_IDLE_HOOK_LIST_SIZE=4 CONFIG_RT_IDLE_HOOK_LIST_SIZE=4
CONFIG_IDLE_THREAD_STACK_SIZE=1024 CONFIG_IDLE_THREAD_STACK_SIZE=1024
# CONFIG_RT_USING_TIMER_SOFT is not set CONFIG_RT_USING_TIMER_SOFT=y
CONFIG_RT_TIMER_THREAD_PRIO=4
CONFIG_RT_TIMER_THREAD_STACK_SIZE=512
# #
# kservice optimization # kservice optimization
@ -289,11 +291,7 @@ CONFIG_ULOG_OUTPUT_LVL=7
CONFIG_ULOG_USING_ISR_LOG=y CONFIG_ULOG_USING_ISR_LOG=y
CONFIG_ULOG_ASSERT_ENABLE=y CONFIG_ULOG_ASSERT_ENABLE=y
CONFIG_ULOG_LINE_BUF_SIZE=128 CONFIG_ULOG_LINE_BUF_SIZE=128
CONFIG_ULOG_USING_ASYNC_OUTPUT=y # CONFIG_ULOG_USING_ASYNC_OUTPUT is not set
CONFIG_ULOG_ASYNC_OUTPUT_BUF_SIZE=2048
CONFIG_ULOG_ASYNC_OUTPUT_BY_THREAD=y
CONFIG_ULOG_ASYNC_OUTPUT_THREAD_STACK=1024
CONFIG_ULOG_ASYNC_OUTPUT_THREAD_PRIORITY=30
# #
# log format # log format
@ -568,16 +566,6 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
# CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set # CONFIG_PKG_USING_RT_VSNPRINTF_FULL is not set
# end of enhanced kernel services # end of enhanced kernel services
#
# POSIX extension functions
#
# CONFIG_PKG_USING_POSIX_GETLINE is not set
# CONFIG_PKG_USING_POSIX_WCWIDTH is not set
# CONFIG_PKG_USING_POSIX_ITOA is not set
# CONFIG_PKG_USING_POSIX_STRINGS is not set
# CONFIG_PKG_USING_POSIX_CTYPES is not set
# end of POSIX extension functions
# #
# acceleration: Assembly language or algorithmic acceleration packages # acceleration: Assembly language or algorithmic acceleration packages
# #
@ -605,7 +593,6 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
# CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_UC_MODBUS is not set
# end of Micrium: Micrium software products porting for RT-Thread # end of Micrium: Micrium software products porting for RT-Thread
# CONFIG_PKG_USING_RTDUINO is not set
# CONFIG_PKG_USING_CAIRO is not set # CONFIG_PKG_USING_CAIRO is not set
# CONFIG_PKG_USING_PIXMAN is not set # CONFIG_PKG_USING_PIXMAN is not set
# CONFIG_PKG_USING_PARTITION is not set # CONFIG_PKG_USING_PARTITION is not set
@ -791,7 +778,6 @@ CONFIG_ULOG_BACKEND_USING_CONSOLE=y
# CONFIG_PKG_USING_UPARAM is not set # CONFIG_PKG_USING_UPARAM is not set
# CONFIG_PKG_USING_HELLO is not set # CONFIG_PKG_USING_HELLO is not set
# CONFIG_PKG_USING_VI is not set # CONFIG_PKG_USING_VI is not set
# CONFIG_PKG_USING_KI is not set
# CONFIG_PKG_USING_ARMv7M_DWT is not set # CONFIG_PKG_USING_ARMv7M_DWT is not set
# CONFIG_PKG_USING_UKAL is not set # CONFIG_PKG_USING_UKAL is not set
# CONFIG_PKG_USING_CRCLIB is not set # CONFIG_PKG_USING_CRCLIB is not set

1
.gitignore vendored
View File

@ -41,3 +41,4 @@ settings/
*.uvguix* *.uvguix*
/Release/ /Release/
/makefile.targets

Binary file not shown.

View File

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="38926886275555880" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-738239081739022212" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>
@ -16,7 +16,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/> <provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="11935337743060155" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-765230630271517937" id="ilg.gnuarmeclipse.managedbuild.cross.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT ARM Cross GCC Built-in Compiler Settings " parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

View File

@ -355,7 +355,7 @@ int decoderaw(rtksvr_t *svr, int index)
nav_t *nav; nav_t *nav;
// sbsmsg_t *sbsmsg=NULL; // sbsmsg_t *sbsmsg=NULL;
int i, ret, ephsat, ephset, fobs = 0; int i, ret, ephsat, ephset, fobs = 0;
rtksvrlock(svr); // todo rtksvrlock(svr);
for (i = 0; i < svr->nb[index]; i++) for (i = 0; i < svr->nb[index]; i++)
{ {
@ -404,7 +404,7 @@ int decoderaw(rtksvr_t *svr, int index)
} }
svr->nb[index] = 0; svr->nb[index] = 0;
rtksvrunlock(svr); // rtksvrunlock(svr);
return fobs; return fobs;
} }

View File

@ -40,23 +40,10 @@ int main(void)
} }
} }
struct test{
int a;
int b;
int *a_p;
int *b_p;
}test,* test_p;
void test_entry() void test_entry()
{ {
// const char testbuff[] = {0xD3,0x00,0x13,0x3E,0xD7,0xD3,0x02,0x02,0x98,0x0E,0xDE,0xEF,0x34,0xB4,0xBD,0x62,0xAC,0x09,0x41,0x98,0x6F,0x33,0x36,0x0B,0x98};
// rt_device_write(serial3,0,testbuff,sizeof(testbuff));
// LOG_I("rtksvr_t size= %d",sizeof(rtksvr_t));
test.a=1;
test.b=2;
test.a_p=&test.a;
test.b_p=&test.b;
test_p = &test;
LOG_I("%d",&test_p->a);
} }
MSH_CMD_EXPORT(test_entry,test_entry); MSH_CMD_EXPORT(test_entry,test_entry);

View File

@ -15,6 +15,9 @@
#define RT_USING_IDLE_HOOK #define RT_USING_IDLE_HOOK
#define RT_IDLE_HOOK_LIST_SIZE 4 #define RT_IDLE_HOOK_LIST_SIZE 4
#define IDLE_THREAD_STACK_SIZE 1024 #define IDLE_THREAD_STACK_SIZE 1024
#define RT_USING_TIMER_SOFT
#define RT_TIMER_THREAD_PRIO 4
#define RT_TIMER_THREAD_STACK_SIZE 512
/* kservice optimization */ /* kservice optimization */
@ -183,11 +186,6 @@
#define ULOG_USING_ISR_LOG #define ULOG_USING_ISR_LOG
#define ULOG_ASSERT_ENABLE #define ULOG_ASSERT_ENABLE
#define ULOG_LINE_BUF_SIZE 128 #define ULOG_LINE_BUF_SIZE 128
#define ULOG_USING_ASYNC_OUTPUT
#define ULOG_ASYNC_OUTPUT_BUF_SIZE 2048
#define ULOG_ASYNC_OUTPUT_BY_THREAD
#define ULOG_ASYNC_OUTPUT_THREAD_STACK 1024
#define ULOG_ASYNC_OUTPUT_THREAD_PRIORITY 30
/* log format */ /* log format */

View File

@ -34,26 +34,49 @@ static char thread_user_rtcm_data_stack[get_rtcm_user_data_stack_size];
static struct rt_thread get_ref_rtcm_data; static struct rt_thread get_ref_rtcm_data;
static char thread_ref_rtcm_data_stack[get_rtcm_ref_data_stack_size]; static char thread_ref_rtcm_data_stack[get_rtcm_ref_data_stack_size];
struct rt_mutex userf_svrlock; struct rt_mutex userf_svrlock;
rtksvr_t *svr; /* rtk server struct */ rtksvr_t *svr; /* rtk server struct */
//serial3 -->user serial_rtcm_buff[0][] //serial3 -->user serial_rtcm_buff[0][]
//serial6 -->ref serial_rtcm_buff[1][] //serial6 -->ref serial_rtcm_buff[1][]
char buff[8000];
static void thread_get_ref_rtcm_data(void *parameter) static void thread_get_ref_rtcm_data(void *parameter)
{ {
while (1) while (1)
{ {
rt_completion_wait(&rtcm_ref_data_process_completion, RT_WAITING_FOREVER);
//to make sure there is only one sem exist at uart,keep data from being damaged by dma transmit. //to make sure there is only one sem exist at uart,keep data from being damaged by dma transmit.
//rt thread could not get uart status when it receiving data. //rt thread could not get uart status when it receiving data.
//it may cross frame lost if the system runs slow. //it may cross frame lost if the system runs slow.
if (rt_sem_take(&uart6_simpack.rx_sem, RT_WAITING_FOREVER) == RT_EOK) //need a completion sem connect to rtcm data processing thread. if (rt_sem_take(&uart6_simpack.rx_sem, RT_WAITING_FOREVER) == RT_EOK) //need a completion sem connect to rtcm data processing thread.
{
if (rt_completion_wait(&rtcm_ref_data_process_completion, RT_WAITING_NO) == RT_EOK)
{ {
READ_SERIAL6(svr->buff[1]); READ_SERIAL6(svr->buff[1]);
// READ_SERIAL6(buff);
svr->nb[1] = uart6_simpack.rx_num; svr->nb[1] = uart6_simpack.rx_num;
rt_event_send(&uart_event, EVENT_REF_RTCM_DATA_FLAG); rt_event_send(&uart_event, EVENT_REF_RTCM_DATA_FLAG);
} }
else
{
if (uart6_simpack.rx_num != 0)
{
char *drop = rt_malloc(uart6_simpack.rx_num);
if (drop == RT_NULL)
{
LOG_E("heap not enough for thread_get_ref_rtcm_data");
}
else
{
READ_SERIAL6(drop);
rt_free(drop);
}
}
}
}
} }
} }
@ -62,16 +85,36 @@ static void thread_get_user_rtcm_data(void *parameter)
while (1) while (1)
{ {
rt_completion_wait(&rtcm_user_data_process_completion, RT_WAITING_FOREVER);
//to make sure there is only one sem exist at uart,keep data from being damaged by dma transmit. //to make sure there is only one sem exist at uart,keep data from being damaged by dma transmit.
//rt thread could not get uart status when it receiving data. //rt thread could not get uart status when it receiving data.
//it may cross frame lost if the system runs slow. //it may cross frame lost if the system runs slow.
if (rt_sem_take(&uart3_simpack.rx_sem, RT_WAITING_FOREVER) == RT_EOK) //need a completion sem connect to rtcm data processing thread. if (rt_sem_take(&uart3_simpack.rx_sem, RT_WAITING_FOREVER) == RT_EOK) //need a completion sem connect to rtcm data processing thread.
{
if (rt_completion_wait(&rtcm_user_data_process_completion, RT_WAITING_NO) == RT_EOK)
{ {
READ_SERIAL3(svr->buff[0]); READ_SERIAL3(svr->buff[0]);
svr->nb[0] = uart3_simpack.rx_num; svr->nb[0] = uart3_simpack.rx_num;
rt_event_send(&uart_event, EVENT_UAER_RTCM_DATA_FLAG); rt_event_send(&uart_event, EVENT_UAER_RTCM_DATA_FLAG);
} }
else
{
if (uart3_simpack.rx_num != 0)
{
char *drop = rt_malloc(uart3_simpack.rx_num);
if (drop == RT_NULL)
{
LOG_E("heap not enough for thread_get_user_rtcm_data");
}
else
{
READ_SERIAL3(drop);
rt_free(drop);
}
}
}
}
} }
} }
@ -84,12 +127,12 @@ static int nmeacycle = 5000; /* nmea request cycle (ms) */
static int nmeareq = 0; /* nmea request type (0:off,1:lat/lon,2:single) */ static int nmeareq = 0; /* nmea request type (0:off,1:lat/lon,2:single) */
extern prcopt_t prcopt_; extern prcopt_t prcopt_;
extern solopt_t solopt_; extern solopt_t solopt_;
static obsd_t data[MAXOBS * 2]; /* 7616 B */ //static obsd_t data[MAXOBS * 2]; /* 7616 B */
static void thread_rtk_proces(void *parameter) static void thread_rtk_proces(void *parameter)
{ {
double pos[3] = { 0.0, 0.0, 0.0 }, npos[3] = { 0.0, 0.0, 0.0 }; double pos[3] = { 0.0, 0.0, 0.0 }, npos[3] = { 0.0, 0.0, 0.0 };
static double nmeapos[] = { 0, 0, 0 }; static double nmeapos[] = { 0, 0, 0 };
uint32_t recevd_event = 0;
svr = (rtksvr_t *) rt_malloc(sizeof(rtksvr_t)); svr = (rtksvr_t *) rt_malloc(sizeof(rtksvr_t));
if (svr == RT_NULL) if (svr == RT_NULL)
{ {
@ -118,12 +161,11 @@ static void thread_rtk_proces(void *parameter)
double tt; double tt;
uint32_t tick, ticknmea, tick1hz, tickreset; uint32_t tick, ticknmea, tick1hz, tickreset;
uint8_t *p, *q; uint8_t *p, *q;
int i, j, n = 0, fobs[2] = { 0 }, cycle, cputime=0; int n = 0, fobs[2] = { 0 }, cycle, cputime = 0;
uint8_t nr, nu;
svr->state = 1; svr->state = 1;
obs.data = data; // obs.data = data;
// obs.data = (obsd_t *)rt_malloc(sizeof(obsd_t)*MAXOBS*2);
svr->tick = tickget(); svr->tick = tickget();
ticknmea = tick1hz = svr->tick - 1000; ticknmea = tick1hz = svr->tick - 1000;
tickreset = svr->tick - 30000; tickreset = svr->tick - 30000;
@ -141,44 +183,79 @@ static void thread_rtk_proces(void *parameter)
{ {
tick = tickget(); tick = tickget();
uint32_t recevd_event = 0;
rt_event_recv(&uart_event, (EVENT_UAER_RTCM_DATA_FLAG | EVENT_REF_RTCM_DATA_FLAG), rt_event_recv(&uart_event, (EVENT_UAER_RTCM_DATA_FLAG | EVENT_REF_RTCM_DATA_FLAG),
(RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR), RT_WAITING_FOREVER, &recevd_event); (RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR), RT_WAITING_FOREVER, &recevd_event);
if (recevd_event & EVENT_UAER_RTCM_DATA_FLAG || recevd_event & EVENT_REF_RTCM_DATA_FLAG)
{
if (recevd_event & EVENT_UAER_RTCM_DATA_FLAG) if (recevd_event & EVENT_UAER_RTCM_DATA_FLAG)
{ {
fobs[0] = decoderaw(svr, 0); fobs[0] = decoderaw(svr, 0);
rt_completion_done(&rtcm_user_data_process_completion); rt_completion_done(&rtcm_user_data_process_completion);
} }
else if (recevd_event & EVENT_REF_RTCM_DATA_FLAG) if (recevd_event & EVENT_REF_RTCM_DATA_FLAG)
{ {
fobs[1] = decoderaw(svr, 1); fobs[1] = decoderaw(svr, 1);
rt_completion_done(&rtcm_ref_data_process_completion); rt_completion_done(&rtcm_ref_data_process_completion);
} }
else { }
else
{
// rt_thread_sleep(5);
continue; continue;
} }
uint8_t nr = 0;
uint8_t nu = 0;
/* 将基准站和移动站的观测数据合二为一 这里重新申请了一个MAXOBS*2 的数组, 我觉得是不是有点问题? */ /* 将基准站和移动站的观测数据合二为一 这里重新申请了一个MAXOBS*2 的数组, 我觉得是不是有点问题? */
for (i = 0; i < fobs[0]; i++)
{
obs.n = 0; obs.n = 0;
nr = nu = 0;
for (j = 0; j < svr->obs[0][i].n && obs.n < MAXOBS * 2; j++) for (int i = 0; i < fobs[0]; i++)
{
for (int j = 0; j < svr->obs[0][i].n; j++)
{ {
obs.data[obs.n++] = svr->obs[0][i].data[j];
nu++; nu++;
} }
}
for (j = 0; j < svr->obs[1][i].n && obs.n < MAXOBS * 2; j++) for (int i = 0; i < fobs[1]; i++)
{
for (int j = 0; j < svr->obs[1][i].n; j++)
{ {
obs.data[obs.n++] = svr->obs[1][0].data[j];
nr++; nr++;
} }
/* rtk positioning */ }
rtksvrlock(svr); nu = (nu > MAXOBS) ? MAXOBS : nu;
rtkpos(&svr->rtk, obs.data, obs.n, &svr->nav); nr = (nr > MAXOBS * 2 - nu) ? (MAXOBS * 2) - nr : nr;
rtksvrunlock(svr); if (nu + nr == 0)
{
// rt_thread_mdelay(5);
continue;
}
obs.data = (obsd_t *) rt_malloc(sizeof(obsd_t) * (nu + nr));
obs.n = 0;
for (int i = 0; i < fobs[0]; i++)
{
for (int j = 0; j < svr->obs[0][i].n && obs.n < nu; j++)
{
obs.data[obs.n++] = svr->obs[0][i].data[j];
}
}
for (int i = 0; i < fobs[1]; i++)
{
for (int j = 0; j < svr->obs[1][i].n && obs.n < nu + nr; j++)
{
obs.data[obs.n++] = svr->obs[1][i].data[j];
}
}
/* rtk positioning */
// rtksvrlock(svr);
rtkpos(&svr->rtk, obs.data, obs.n, &svr->nav);
// rtksvrunlock(svr);
rt_free(obs.data);
obs.data = RT_NULL;
/* 如果解算结果有效, 设置解算时间点 */ /* 如果解算结果有效, 设置解算时间点 */
if (svr->rtk.sol.stat != SOLQ_NONE) if (svr->rtk.sol.stat != SOLQ_NONE)
{ {
@ -190,11 +267,10 @@ static void thread_rtk_proces(void *parameter)
// writesol_mini(svr, i); // writesol_mini(svr, i);
} }
/* 如果设定的运算时间到了发现还没有计算完, 则记录没有计算完的观测次数 */ /* 如果设定的运算时间到了发现还没有计算完, 则记录没有计算完的观测次数 */
if ((int) (tickget() - tick) >= svr->cycle) // if ((int) (tickget() - tick) >= svr->cycle)
{ // {
svr->prcout += fobs[0] - i - 1; // svr->prcout += fobs[0] - i - 1;
} // }
}
/* send null solution if no solution (1hz) */ /* send null solution if no solution (1hz) */
if (svr->rtk.sol.stat == SOLQ_NONE && (int) (tick - tick1hz) >= 1000) if (svr->rtk.sol.stat == SOLQ_NONE && (int) (tick - tick1hz) >= 1000)
{ {
@ -213,9 +289,10 @@ static void thread_rtk_proces(void *parameter)
svr->cputime = cputime; svr->cputime = cputime;
/* sleep until next cycle */ /* sleep until next cycle */
sleepms(15);
} }
} }
sleepms(1);
} }
static void user_init_task(rt_thread_t thread, const char *name, void (*entry)(void *parameter), void *stack_start, static void user_init_task(rt_thread_t thread, const char *name, void (*entry)(void *parameter), void *stack_start,
@ -242,21 +319,20 @@ void task_init(void)
{ {
rt_event_init(&uart_event, "uart_event", RT_IPC_FLAG_PRIO); rt_event_init(&uart_event, "uart_event", RT_IPC_FLAG_PRIO);
rt_mutex_init(&userf_svrlock,"svrlock",RT_IPC_FLAG_PRIO); rt_mutex_init(&userf_svrlock, "svrlock", RT_IPC_FLAG_PRIO);
rt_completion_init(&rtcm_user_data_process_completion); rt_completion_init(&rtcm_user_data_process_completion);
rt_completion_init(&rtcm_ref_data_process_completion); rt_completion_init(&rtcm_ref_data_process_completion);
rt_thread_t trd=rt_thread_create("rtk_proces", thread_rtk_proces, RT_NULL, 3000, thread_rtk_proces_priority, DEFAULT_USER_THREA_TICK); rt_thread_t trd = rt_thread_create("rtk_proces", thread_rtk_proces, RT_NULL, 8000, thread_rtk_proces_priority,
DEFAULT_USER_THREA_TICK);
rt_thread_startup(trd); rt_thread_startup(trd);
user_init_task(&get_user_rtcm_data, "thread_get_user_rtcm_data", thread_get_user_rtcm_data, user_init_task(&get_user_rtcm_data, "thread_get_user_rtcm_data", thread_get_user_rtcm_data,
thread_user_rtcm_data_stack, thread_user_rtcm_data_stack,
get_rtcm_user_data_stack_size, THREAD_get_user_rtcm_data_priority, DEFAULT_USER_THREA_TICK, RT_TRUE); get_rtcm_user_data_stack_size, THREAD_get_user_rtcm_data_priority, DEFAULT_USER_THREA_TICK, RT_TRUE);
user_init_task(&get_ref_rtcm_data, "thread_get_ref_rtcm_data", thread_get_ref_rtcm_data, user_init_task(&get_ref_rtcm_data, "thread_get_ref_rtcm_data", thread_get_ref_rtcm_data, thread_ref_rtcm_data_stack,
thread_ref_rtcm_data_stack,
get_rtcm_ref_data_stack_size, THREAD_get_ref_rtcm_data_priority, DEFAULT_USER_THREA_TICK, RT_TRUE); get_rtcm_ref_data_stack_size, THREAD_get_ref_rtcm_data_priority, DEFAULT_USER_THREA_TICK, RT_TRUE);
// user_init_task(&rtk_proces, "rtk_proces", thread_rtk_proces, thread_rtk_proces_stack, // user_init_task(&rtk_proces, "rtk_proces", thread_rtk_proces, thread_rtk_proces_stack,
// rtk_proces_stack_size, thread_rtk_proces_priority, DEFAULT_USER_THREA_TICK, RT_TRUE); // rtk_proces_stack_size, thread_rtk_proces_priority, DEFAULT_USER_THREA_TICK, RT_TRUE);
} }

View File

@ -24,9 +24,9 @@
extern struct rt_mutex userf_svrlock; extern struct rt_mutex userf_svrlock;
struct rt_mutex userf_svrlock; //struct rt_mutex userf_svrlock;
#define rtksvrlock(svr) rt_mutex_take(&userf_svrlock,RT_WAITING_FOREVER) //#define rtksvrlock(svr) rt_mutex_take(&userf_svrlock,RT_WAITING_FOREVER)
#define rtksvrunlock(svr) rt_mutex_release(&userf_svrlock) //#define rtksvrunlock(svr) rt_mutex_release(&userf_svrlock)
extern uart_simpack uart3_simpack; //from user_uart.h extern uart_simpack uart3_simpack; //from user_uart.h
extern uart_simpack uart6_simpack; //from user_uart.h extern uart_simpack uart6_simpack; //from user_uart.h

View File

@ -38,7 +38,7 @@ rt_device_t uart3_init(void)
config.baud_rate = BAUD_RATE_460800; //修改波特率为 460800 config.baud_rate = BAUD_RATE_460800; //修改波特率为 460800
config.data_bits = DATA_BITS_8; //数据位 8 config.data_bits = DATA_BITS_8; //数据位 8
config.stop_bits = STOP_BITS_1; //停止位 1 config.stop_bits = STOP_BITS_1; //停止位 1
config.bufsz = 4096; //修改缓冲区 buff size 为 2048 config.bufsz = 8000; //修改缓冲区 buff size 为 2048
config.parity = PARITY_NONE; //无奇偶校验位 config.parity = PARITY_NONE; //无奇偶校验位
rt_device_control(serial3, RT_DEVICE_CTRL_CONFIG, &config); rt_device_control(serial3, RT_DEVICE_CTRL_CONFIG, &config);
if (rt_device_set_rx_indicate(serial3, uart3_rx_complete) != RT_EOK) if (rt_device_set_rx_indicate(serial3, uart3_rx_complete) != RT_EOK)
@ -64,10 +64,10 @@ rt_device_t uart6_init(void)
LOG_E("could not find device: %s", USER_UART6_NAME); LOG_E("could not find device: %s", USER_UART6_NAME);
return RT_NULL; return RT_NULL;
} }
config.baud_rate = BAUD_RATE_460800; //修改波特率为 460800 config.baud_rate = BAUD_RATE_115200; //修改波特率为 460800
config.data_bits = DATA_BITS_8; //数据位 8 config.data_bits = DATA_BITS_8; //数据位 8
config.stop_bits = STOP_BITS_1; //停止位 1 config.stop_bits = STOP_BITS_1; //停止位 1
config.bufsz = 4096; //修改缓冲区 buff size 为 2048 config.bufsz = 8000; //修改缓冲区 buff size 为 2048
config.parity = PARITY_NONE; //无奇偶校验位 config.parity = PARITY_NONE; //无奇偶校验位
rt_device_control(serial6, RT_DEVICE_CTRL_CONFIG, &config); rt_device_control(serial6, RT_DEVICE_CTRL_CONFIG, &config);
if (rt_device_set_rx_indicate(serial6, uart6_rx_complete) != RT_EOK) if (rt_device_set_rx_indicate(serial6, uart6_rx_complete) != RT_EOK)

View File

@ -19,7 +19,7 @@
#define USER_UART6_NAME "uart6" #define USER_UART6_NAME "uart6"
#define READ_SERIAL3(...) rt_device_read(serial3,0,__VA_ARGS__,uart3_simpack.rx_num) #define READ_SERIAL3(...) rt_device_read(serial3,0,__VA_ARGS__,uart3_simpack.rx_num)
#define READ_SERIAL6(...) rt_device_read(serial6,0,__VA_ARGS__,uart3_simpack.rx_num) #define READ_SERIAL6(...) rt_device_read(serial6,0,__VA_ARGS__,uart6_simpack.rx_num)
rt_device_t serial3; rt_device_t serial3;
rt_device_t serial6; rt_device_t serial6;