summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2012-11-27 09:19:40 +0100
committerAlexander Wenzel <Alexander.AW.Wenzel@bmw.de>2012-12-04 14:16:44 +0100
commit1d97f52cbc598e2604eb079f776309d005846c69 (patch)
tree2444836757a729bce9826350f79d94ba4930807e
parent67ab16ef0503bb0629a729b77999dd851bdbcd47 (diff)
downloadDLT-daemon-1d97f52cbc598e2604eb079f776309d005846c69.tar.gz
Reduce used stack size needed by making resend buffer static.
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
-rw-r--r--include/dlt/dlt_user.h5
-rw-r--r--src/lib/dlt_user.c9
2 files changed, 9 insertions, 5 deletions
diff --git a/include/dlt/dlt_user.h b/include/dlt/dlt_user.h
index cfbd2d8..0523da2 100644
--- a/include/dlt/dlt_user.h
+++ b/include/dlt/dlt_user.h
@@ -148,6 +148,8 @@ typedef enum
#define DLT_USER_BUF_MAX_SIZE 2048 /**< maximum size of each user buffer, also used for injection buffer */
+#define DLT_USER_RESENDBUF_MAX_SIZE (DLT_USER_BUF_MAX_SIZE + 100) /**< Size of resend buffer; Max DLT message size is 2K plus some extra header space */
+
/* Use a semaphore or mutex from your OS to prevent concurrent access to the DLT buffer. */
#define DLT_SEM_LOCK() { sem_wait(&dlt_mutex); }
#define DLT_SEM_FREE() { sem_post(&dlt_mutex); }
@@ -231,6 +233,9 @@ typedef struct
//DltRingBuffer rbuf;
DltBuffer startup_buffer; /**< Ring-buffer for buffering messages during startup and missing connection */
+ // Buffer used for resending, locked by DLT semaphore
+ uint8_t resend_buffer[DLT_USER_RESENDBUF_MAX_SIZE];
+
#ifdef DLT_SHM_ENABLE
DltShm dlt_shm;
#endif
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 6fdbba8..87a7ffd 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -3532,7 +3532,6 @@ int dlt_user_log_check_user_message(void)
int dlt_user_log_resend_buffer(void)
{
int num,count;
- uint8_t buf[DLT_USER_RCVBUF_MAX_SIZE];
int size;
DltReturnValue ret;
@@ -3545,18 +3544,18 @@ int dlt_user_log_resend_buffer(void)
{
DLT_SEM_LOCK();
- size = dlt_buffer_copy(&(dlt_user.startup_buffer),buf,sizeof(buf));
+ size = dlt_buffer_copy(&(dlt_user.startup_buffer),dlt_user.resend_buffer,sizeof(dlt_user.resend_buffer));
if (size>0)
{
#ifdef DLT_SHM_ENABLE
- dlt_shm_push(&dlt_user.dlt_shm,buf+sizeof(DltUserHeader),size-sizeof(DltUserHeader),0,0,0,0);
+ dlt_shm_push(&dlt_user.dlt_shm,dlt_user.resend_buffer+sizeof(DltUserHeader),size-sizeof(DltUserHeader),0,0,0,0);
/* log to FIFO */
- ret = dlt_user_log_out3(dlt_user.dlt_log_handle, buf,sizeof(DltUserHeader),0,0,0,0);
+ ret = dlt_user_log_out3(dlt_user.dlt_log_handle, dlt_user.resend_buffer,sizeof(DltUserHeader),0,0,0,0);
#else
/* log to FIFO */
- ret = dlt_user_log_out3(dlt_user.dlt_log_handle, buf,size,0,0,0,0);
+ ret = dlt_user_log_out3(dlt_user.dlt_log_handle, dlt_user.resend_buffer,size,0,0,0,0);
#endif
/* in case of error, keep message in ringbuffer */