реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ucos ii и Nios II, не правильно работают флаги
Realking
сообщение Feb 10 2010, 13:33
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



собрал систему на 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

Бьюсь уже неделю не могу понять откуда двойка берется?
Помогите


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
Realking
сообщение Feb 12 2010, 05:24
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 498
Регистрация: 4-10-04
Из: Нижний Новгород
Пользователь №: 771



заремил OSInit() и все стало в норме
Че за ерунда


--------------------
Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается.
Go to the top of the page
 
+Quote Post
vetal
сообщение Feb 12 2010, 10:14
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 2 095
Регистрация: 27-08-04
Из: Россия, СПб
Пользователь №: 553



OSInit вызывает HAL до передачи управления main. Вы его повторно, получается, вызвали.
Go to the top of the page
 
+Quote Post
qVlad
сообщение Feb 15 2011, 15:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Пытаюсь сделать обработку сообщений с 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;
}

Go to the top of the page
 
+Quote Post
UDmitry
сообщение Jun 13 2015, 10:50
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 28-01-14
Из: Таганрог
Пользователь №: 80 225



Вы же в курсе да, что вы передаете и принимаете указатель на элемент, т.е после приёма указателя вы копируете данные, которые хранятся по этому адресу и дальше с ним работаете, а если вы к ним напрямую обращаетесь вам нужно проконтролировать, что данные не изменятся в другом процессе.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jun 13 2015, 18:01
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 UDmitry
Извините, а вы собственно к кому обращаетесь ? laughing.gif
Go to the top of the page
 
+Quote Post
UDmitry
сообщение Jun 18 2015, 16:49
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 28-01-14
Из: Таганрог
Пользователь №: 80 225



Цитата(Kuzmi4 @ Jun 13 2015, 21:01) *
2 UDmitry
Извините, а вы собственно к кому обращаетесь ? laughing.gif


Писал товарищу qVlad.

...Упс, что-то я сначала не понял. Непривычно видеть, что настолько старые вопросы и относительно в топе.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 05:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016