Realking 0 10 февраля, 2010 Опубликовано 10 февраля, 2010 · Жалоба собрал систему на SOPS, написал прогу #include <stdio.h> #include "includes.h" #include "system.h" OS_STK Stack[2048]; ALT_FLAG_GRP(Flags); void Task(void* pdata) { while (true) { OSTimeDlyHMSM(0, 0, 1, 0); fprintf(stderr, "Flags 1 = %04x\n", Flags->OSFlagFlags); ALT_FLAG_POST(Flags, 0x80, OS_FLAG_SET); fprintf(stderr, "Flags 2 = %04x\n", Flags->OSFlagFlags); ALT_FLAG_PEND(Flags, 0x80, OS_FLAG_WAIT_SET_ANY + OS_FLAG_CONSUME, 0); } } // ********************************************************************* // The main function creates tasks and starts multi-tasking // ********************************************************************* int main(void) { OSInit(); ALT_FLAG_CREATE(&Flagsq, 0); OSTaskCreateExt( Task, (void*)0, &Stack[2047], 10, 10, Stack, 2048, (void*)0, 0); OSStart(); return 0; } так вот при запуске выводит Flags 1 = 0000 Flags 2 = 0082 Бьюсь уже неделю не могу понять откуда двойка берется? Помогите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Realking 0 12 февраля, 2010 Опубликовано 12 февраля, 2010 · Жалоба заремил OSInit() и все стало в норме Че за ерунда Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 12 февраля, 2010 Опубликовано 12 февраля, 2010 · Жалоба OSInit вызывает HAL до передачи управления main. Вы его повторно, получается, вызвали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
qVlad 0 15 февраля, 2011 Опубликовано 15 февраля, 2011 · Жалоба Пытаюсь сделать обработку сообщений с uart через очереди uc/Os-II. В очередь кладутся верные значения,а вот извлекают сообщения "0", хотя их количество уменьшается после извлечения. Например по прерываниям от uart пришли сообщения 45 B0 F1, всего 3 сообщения. при чтении из очереди я 3 раза прочитаю 0. Подскажите что делаю не так. #include <stdio.h> #include <unistd.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #include "includes.h" #include "alt_ucosii_simple_error_check.h" #include "altera_avalon_pio_regs.h" #include "altera_avalon_sgdma_regs.h" #include "altera_avalon_sgdma.h" #include "altera_avalon_sgdma_descriptor.h" #include "altera_avalon_uart_regs.h" /* Definition of Task Stacks */ #define TASK_STACKSIZE 2048 OS_STK receive_uart_task_stk[TASK_STACKSIZE]; /* Definition of Task Prioities */ #define INITIALIZE_TASK_PRIORITY 6 #define RECEIVE_UART_PRIORITY 12 /* Definition of Message Queue */ #define MSG_QUEUE_SIZE 30 /*Size of message queue used in example*/ OS_EVENT *msgqueue; /*Message queue pointer */ void *msgqueueTbl[MSG_QUEUE_SIZE];/*Storage for messages*/ /* Local Function Prototypes */ int initOSDataStructs(void); int initCreateTasks(void); void uart_send_task(void* pdata){ INT8U return_code = OS_NO_ERR; unsigned int msg = 0; OS_Q_DATA queue_data; unsigned short status; status = IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE); if( status & ALTERA_AVALON_UART_CONTROL_RRDY_MSK) { msg = IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE); return_code = OSQQuery(msgqueue, &queue_data); alt_ucosii_check_return_code(return_code); printf("in msg=%x, num=%d\n",msg,queue_data.OSNMsgs); if(queue_data.OSNMsgs < UART_QUEUE_SIZE) /*Check the number of messages*/ { /*in the message queue*/ return_code = OSQPostOpt(msgqueue, (void *)&msg, OS_POST_OPT_BROADCAST); alt_ucosii_check_return_code(return_code); } else { OSTimeDlyHMSM(0, 0, 1, 0); } } } void receive_uart_task(void* pdata) { INT8U return_code = OS_NO_ERR; unsigned int *msg; while (1) { msg = (unsigned int *)OSQPend(msgqueue, 0, &return_code); printf("uart_msg=%d,err=%d\n",*msg,return_code); alt_ucosii_check_return_code(return_code); OSTimeDlyHMSM(0, 0, 0, 50); } } void initialize_task(void* pdata) { INT8U return_code = OS_NO_ERR; initOSDataStructs(); alt_irq_register (UART_0_IRQ,NULL,uart_send_task); initCreateTasks(); return_code = OSTaskDel(OS_PRIO_SELF); alt_ucosii_check_return_code(return_code); while (1); } int main (int argc, char* argv[], char* envp[]) { INT8U return_code = OS_NO_ERR; return_code = OSTaskCreateExt(initialize_task, NULL, (void *)&initialize_task_stk[TASK_STACKSIZE], INITIALIZE_TASK_PRIORITY, INITIALIZE_TASK_PRIORITY, initialize_task_stk, TASK_STACKSIZE, NULL, 0); alt_ucosii_check_return_code(return_code); OSStart(); return 0; } int initOSDataStructs(void) { msgqueue = OSQCreate(&msgqueueTbl[0], MSG_QUEUE_SIZE); return 0; } int initCreateTasks(void) { INT8U return_code = OS_NO_ERR; return_code = OSTaskCreateExt(receive_uart_task, NULL, (void *)&receive_uart_task_stk[TASK_STACKSIZE], RECEIVE_UART_PRIORITY, RECEIVE_UART_PRIORITY, receive_uart_task_stk, TASK_STACKSIZE, NULL, 0); alt_ucosii_check_return_code(return_code); return 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dart191 0 13 июня, 2015 Опубликовано 13 июня, 2015 · Жалоба Вы же в курсе да, что вы передаете и принимаете указатель на элемент, т.е после приёма указателя вы копируете данные, которые хранятся по этому адресу и дальше с ним работаете, а если вы к ним напрямую обращаетесь вам нужно проконтролировать, что данные не изменятся в другом процессе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 13 июня, 2015 Опубликовано 13 июня, 2015 · Жалоба 2 UDmitry Извините, а вы собственно к кому обращаетесь ? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dart191 0 18 июня, 2015 Опубликовано 18 июня, 2015 · Жалоба 2 UDmitry Извините, а вы собственно к кому обращаетесь ? :laughing: Писал товарищу qVlad. ...Упс, что-то я сначала не понял. Непривычно видеть, что настолько старые вопросы и относительно в топе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться