task_create to pthread_create on nuttx for ch438

This commit is contained in:
wgzAIIT 2022-05-09 19:33:27 +08:00
parent ee132df28a
commit 8d6e9532cf
1 changed files with 29 additions and 24 deletions

View File

@ -26,7 +26,7 @@
/**************************************************************************** /****************************************************************************
* Private Function Prototypes * Private Function Prototypes
****************************************************************************/ ****************************************************************************/
static int getInterruptStatus(int argc, char **argv); static FAR void *getInterruptStatus(FAR void *arg);
static void CH438SetOutput(void); static void CH438SetOutput(void);
static void CH438SetInput(void); static void CH438SetInput(void);
static uint8_t ReadCH438Data(uint8_t addr); static uint8_t ReadCH438Data(uint8_t addr);
@ -109,26 +109,24 @@ static const struct file_operations g_ch438fops =
* thread task getInterruptStatus * thread task getInterruptStatus
* *
****************************************************************************/ ****************************************************************************/
static int getInterruptStatus(int argc, char **argv) static FAR void *getInterruptStatus(FAR void *arg)
{ {
uint8_t ext_uart_no = 0; uint8_t i;
while(1) while(1)
{ {
pthread_mutex_lock(&mutex[ext_uart_no]);
gInterruptStatus = ReadCH438Data(REG_SSR_ADDR); gInterruptStatus = ReadCH438Data(REG_SSR_ADDR);
if(!gInterruptStatus) if(!gInterruptStatus)
{ {
pthread_mutex_unlock(&mutex[ext_uart_no]);
continue; continue;
} }
for(i = 0; i < CH438PORTNUM; i++)
for(ext_uart_no = 0; ext_uart_no < CH438PORTNUM; ext_uart_no++)
{ {
if(gInterruptStatus & Interruptnum[ext_uart_no]) if(gInterruptStatus & Interruptnum[i])
{ {
done[ext_uart_no] = true; pthread_mutex_lock(&mutex[i]);
pthread_cond_signal(&cond[ext_uart_no]); done[i] = true;
pthread_mutex_unlock(&mutex[ext_uart_no]); pthread_cond_signal(&cond[i]);
pthread_mutex_unlock(&mutex[i]);
} }
} }
} }
@ -548,6 +546,9 @@ static void Ch438InitDefault(void)
int ret = 0; int ret = 0;
int i; int i;
struct sched_param param;
pthread_attr_t attr;
pthread_t thread;
/* Initialize the mutex */ /* Initialize the mutex */
@ -570,7 +571,11 @@ static void Ch438InitDefault(void)
} }
} }
ret = task_create("ch438_task", 60, 8192, getInterruptStatus, NULL); pthread_attr_init(&attr);
param.sched_priority = 60;
pthread_attr_setschedparam(&attr, &param);
pthread_attr_setstacksize(&attr, 2048);
ret = pthread_create(&thread, &attr, getInterruptStatus, NULL);
if (ret < 0) if (ret < 0)
{ {
ch438err("task create failed, status=%d\n", ret); ch438err("task create failed, status=%d\n", ret);