Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2
Smoky
Цитата(aaarrr @ Aug 14 2011, 21:03) *
А volatile действительно нужен? (Сам факт использования объекта в прерывании не является безусловным к тому показанием.)


Скорее всего я использую его на всякий случай, а что он может быть проблемой в моёи случае?
aaarrr
Так он, собственно, и вызывает ругань в 42-х местах.
Smoky
Цитата(aaarrr @ Aug 14 2011, 21:17) *
Так он, собственно, и вызывает ругань в 42-х местах.


Спасибо Вам, действительно volatile был всему виной.
Smoky
Очень прошу дать ответ на следующий вопрос, почему компилятор в WinAVR ругается на выражение типа: *cloc_prm++;
Однако при просмотре примеров других программ используются именно такие выражения.
Потому мне приходится использовать: *cloc_prm=*cloc_prm+1; в таком виде выражение принимается без проблем.
Палыч
Из-за приоритета операций. В Вашем случае следует записывать (*cloc_prm)++
Smoky
Цитата(Палыч @ Aug 15 2011, 22:26) *
Из-за приоритета операций. В Вашем случае следует записывать (*cloc_prm)++


Спасибо!
777777
Цитата(Павел_Б @ Aug 6 2011, 21:57) *
Уважаемые форумчане, подскажите пожалуйста наиболее оптимальный вариант поиска последовательности нескольких байт.
То есть есть последовательность байт, например
......0x05 0x51 0x12 0x64 0xC0 0x66 0x41..................................................

И вот мне нужно найти начало последовательности 0x64 0xC0 0x66
Как это сделать? smile3046.gif
Спасибо за внимание.


Если нужен действительно наиболее оптимальный вариант, то это алгоритм Бойера-Мура
MrYuran
Цитата(дымок @ Aug 13 2011, 19:31) *
Забыл сказать что я использую WinAVR. Жаль что Вы уклонились от ответа, в принципе я пробовал, не получилось. Потому мой ответ на мой вопрос отрицательный.

Код
typedef unsigned char volatile event;
#define BIT_FIELD  :1

typedef struct stEvents
{
    event Event1   BIT_FIELD ;
    event Event2   BIT_FIELD ;
    event Event3   BIT_FIELD ;
    event Event4   BIT_FIELD ;
} stEvents;


Встречал и такие варианты:
Код
typedef char bool;
#define true 1
#define false 0
Smoky
Цитата(MrYuran @ Aug 18 2011, 13:27) *
Код
typedef unsigned char volatile event;
#define BIT_FIELD  :1

typedef struct stEvents
{
    event Event1   BIT_FIELD;
    event Event2   BIT_FIELD;
    event Event3   BIT_FIELD;
    event Event4   BIT_FIELD;
} stEvents;


На эти битовые поля можно использовать указатели?
alexeyv
Цитата
На эти битовые поля можно использовать указатели?


Ни на какме битовые поля нельзя использовать указатели. Указатель содержит только адрес памяти. А на битовое поле необходимо еще его положение в байте и его длину. Где это все хранить?

Код
typedef unsigned char volatile event;
#define BIT_FIELD  :1

typedef struct stEvents
{
    event Event1   BIT_FIELD;
    event Event2   BIT_FIELD;
    event Event3   BIT_FIELD;
    event Event4   BIT_FIELD;
} stEvents;


Вся эта ф_гня заменится предпроцессором и на вход компилятора все равно попадет:

Код
typedef struct stEvents
{
    unsigned char Event1   :1;
    unsigned char Event2   :1;
    unsigned char Event3   :1;
    unsigned char Event4   :1;
} stEvents;


Даже если мы корову назовем тигром, то она все равно не перестанет быть коровой и не начнет есть мясо!!
MrYuran
Цитата(alexeyv @ Aug 19 2011, 07:56) *
Вся эта ф_гня заменится предпроцессором и на вход компилятора все равно попадет:

Легким движением руки...
#define BIT_FIELD

Получаем структуру байтовых флагов. Пожалуйста, пользуйте указатели.
Конечно, в некотором смысле костыли, но при желании использовать можно.
alexeyv
Цитата
Получаем структуру байтовых флагов. Пожалуйста, пользуйте указатели.


Согласен, но это уже будут не битовые поля, а совсем другая история.................
sergeeff
Нет указателя на бит в байте и нечего тут обсуждать.
Idle
Цитата(Idle @ Aug 7 2011, 00:57) *

пардону просим:

CODE
--- el.c.a 2011-08-20 23:22:43.247702288 +0400
+++ el.c 2011-08-20 23:21:54.836310902 +0400
@@ -7,7 +7,7 @@
if (slen > buflen)
return NULL;
for (size_t i = 0; i <= (buflen - slen); i++) {
- char *pos = (char *)buf + i;
+ int8_t *pos = (int8_t *)buf + i;
if (memcmp(pos, s, slen) == 0)
return pos;
}


да, подкиньте мне пример использования ptrdiff_t вместо неправильного использования вместо него других типов, типа
CODE
size_t slen = strlen(some_outerspace_string);
for (size_t i = 0; i < slen; i++)
printf("%c\n", some_outerspace_string[i]);
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.