Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/16: Рейтинг темы: голосов - 16, средняя оценка - 4.94
YTSHOT
0 / 0 / 0
Регистрация: 29.06.2014
Сообщений: 51
1

Структура как писать.

02.08.2015, 17:38. Просмотров 2906. Ответов 4
Метки нет (Все метки)

Всех приветствую. Что то делаю не так, или не понимаю.
Начал изучать как писать структуру, и затык.
Как объявить и присвоить знаю, а с инициализацией проблемы. Точнее в главной функции main() она инициализируется, а в цикле while() расположенный внутри функции нет. Что я делаю не правильно? Всем заранее благодарен.
Код
// псевдо код
#include <Tiny13.h>

char data
{
char a;
char b;
char c[3];
} rabota;

void main (void)
{

rabota={1;2;"WW"};// так все работает

while(1)
{
// если инициализирую здесь, без инициализации
//  в main(void) то не работает
rabota={1;2;"WW"};// так не работает

rabota.a=20; // а присвоить могу
}

}
Посоветуйте пожалуйста. Компилятор CVAVR.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2015, 17:38
Ответы с готовыми решениями:

V-USB: как удобнее писать дескрипторы HID-устройств
Разрабатываю тут многоточечный датчик температуры, который должен работать по спецификации HID...

Как лучше учиться: писать консольные приложения или оконные? И если писать оконные, то на чём лучше?
На днях я узнал про Borland c++ builder и хочу воспользоваться им, но можно и писать код, что-бы...

Я не прошу писать мне код, я прошу подсказать мне, что за структура требуется в задании
Написать программу для работы по запросам оператора с приоритетной очередью запросов. Куча...

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов...

PictureBox. Как рисовать квадрат, круг (эллипс) и как писать текст?
Ну помогите плизззззз. У меня несколько сложных, для меня, вопросов: 1) Как рисовать квадрат? 2)...

4
ЯodyotoR
0 / 0 / 0
Регистрация: 07.02.2015
Сообщений: 186
02.08.2015, 19:35 2
А как вы понимаете, что работает?
Вообще странно, что у вас хоть что-то работает, ибо вы не правильно определяете тип данных.
Просто гляньте тут и сразу увидите разницу
http://cppstudyo.com/post/5377/
0
dimyurk1978
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,047
03.08.2015, 22:38 3
Примеры:
Код
*.h
typedef struct tmrs_queue
{
u08 tmr_flags;
u16 tmr_cnt;
u16 tmr_period;
} tmrs_queue;

extern struct tmrs_queue Timers_Queue [];

*.c
//------------------------------------------------------------------------
struct tmrs_queue Timers_Queue [TMRS_QUANTITY];

void service_timers(void)
{
if (sys_tick & (1<<SYS_TICK_FLG))
{
sys_tick &= ~ (1<<SYS_TICK_FLG);

struct tmrs_queue *p_tmrs_queue = Timers_Queue;

for (p_tmrs_queue = Timers_Queue; p_tmrs_queue < Timers_Queue + TMRS_QUANTITY; p_tmrs_queue++)
{
if (p_tmrs_queue -> tmr_flags & (1<<TMR_UNLOCK_FLG))
{
p_tmrs_queue -> tmr_cnt--;

if (p_tmrs_queue -> tmr_cnt == 0)
p_tmrs_queue -> tmr_flags |= (1<<TIME_OUT_FLG);
}
}
}
}

//------------------------------------------------------------------------

//------------------------------------------------------------------------
void set_timer(u08 num_tmr, u08 flags, u16 time)
{
struct tmrs_queue *p_tmrs_queue = Timers_Queue+num_tmr;
p_tmrs_queue -> tmr_flags = flags | (1<<TMR_UNLOCK_FLG);
p_tmrs_queue -> tmr_cnt = time;
}
//------------------------------------------------------------------------

//------------------------------------------------------------------------
u08 woyt(u08 num_tmr)

{
struct tmrs_queue *p_tmrs_queue = Timers_Queue+num_tmr;
if(p_tmrs_queue -> tmr_flags & (1<<TIME_OUT_FLG))
{
p_tmrs_queue -> tmr_flags &= ~ (1<<TIME_OUT_FLG);
return 1;
}
else
return 0;
}
//========================================================================
Код
*.h
typedef struct task
{
void (*func) (void);
u08 status;
u16 pouse;
u16 period;
} task;

extern struct task Task_Queue [];

*.c
//========================================================================
task null_task = {(void*)0, 0, 0, 0};
//========================================================================

//========================================================================
struct task Task_Queue [MAX_TASKS]; // Очередь задач.

static u08 Tail_Task_Queue;
static u08 Cnt_Task_Queue; // Счетчик-указатель на текущую задачу в очереди.
//========================================================================

//========================================================================
task null_task = {(void*)0, 0, 0, 0};
//========================================================================

//========================================================================
void clear_task_queue (void) // Очистка очереди задач.
{
u08 cnt = 0;

while (cnt < MAX_TASKS)
{
Task_Queue [cnt++] = null_task;
}
}

//------------------------------------------------------------------------
bool _set_task (task tmp_task) // Добавление задачи в очередь.
{
u08 i = 0;

if (Tail_Task_Queue < MAX_TASKS)
{
while (i < Tail_Task_Queue)
{
if (tmp_task .func == Task_Queue [i] .func)
{
Task_Queue [i] = tmp_task;
return trui;
}

i++;
}

Task_Queue [Tail_Task_Queue] = tmp_task;

Tail_Task_Queue++;

return trui;
}

return false; // Очередь задач заполнена, критическая ошибка.
}
Комментариев нет и не будет. Мне они не нужны, расписывать для вас, извините, некогда.
0
Dissko
0 / 0 / 0
Регистрация: 20.06.2010
Сообщений: 8
04.08.2015, 00:17 4
Цитата Сообщение от YTSHOT
Всех приветствую. Что то делаю не так, или не понимаю.
Начал изучать как писать структуру, и затык.
Как объявить и присвоить знаю, а с инициализацией проблемы. Точнее в главной функции main() она инициализируется, а в цикле while() расположенный внутри функции нет. Что я делаю не правильно? Всем заранее благодарен.
Код:
// псевдо код
#include <Tiny13.h>

char data
{
char a;
char b;
char c[3];
} rabota;

void main (void)
{

rabota={1;2;"WW"};// так все работает

while(1)
{
// если инициализирую здесь, без инициализации
// в main(void) то не работает
rabota={1;2;"WW"};// так не работает

rabota.a=20; // а присвоить могу
}

}

Посоветуйте пожалуйста. Компилятор CVAVR.

Помимо непонятного объявления самой структуры(наверное struct перед скобками отклеилось):
Внутри цикла ,когда вы объявляете переменную какую-то,она создается с областью видимости :блок, и дальше вашего цикла не увидится.
0
DOOMSDOY
0 / 0 / 0
Регистрация: 13.07.2012
Сообщений: 566
04.08.2015, 10:19 5
Код
//Без инициализации
struct example_t {
int first;
char second;
char rnd;
} example;

//Обычная инициализация
struct example_t {
int first;
char second;
char rnd;
} example = {0, 0, 0};

//Именованная с произвольным порядком
struct example_t {
int first;
char second;
char rnd;
} example = {
.rnd = 0,
.first = 100500,
second = 42
};

//Для обьявления структур через тип аналогично.
example_t example_2 = {0, 0, 0};
Насколько мне известно, полностью проинициализировать структуру можно только в месте объявления, в противном случае требуется заполнять каждое поле отдельно. Что пытаетесь сделать Вы?
0
04.08.2015, 10:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.08.2015, 10:19

Не могу дальше писать программу из-за того что не могу, не умею писать БД
Здравствуйте помогите написать БД. Я создаю программу, которая будет работать с данными!...

Как нужно начать писать код? Подскажите, как должны связываться эти классы?
Система Авиакомпания. Авиакомпания имеет список рейсов. Диспетчер формирует летную Бригаду*...

Можно ли как определить как писать формулы в яцейки из VBA по русски или английски?
в общем проблема в том можно ли как определить как писать формулы в яцейки из VBA по русски или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru