Перейти к содержанию
    

Спасибо Вам за профессиональный "костыль". Просто у меня в программе около около десятка таких функций с подобными аргументами, потому и столько предупреждений.

Не должны потери квалификаторов измеряться десятками - скорее всего, это означает, что применены они не по делу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не должны потери квалификаторов измеряться десятками - скорее всего, это означает, что применены они не по делу.

 

Я электронщик, программированием был вынужден заняться ибо без микроконтроллеров никуда. Отношу себя к начинающим, С изучал по учебному пособию Бредли Л.Джонса и Питера Эйткена. О передаче в функции адресов переменных в качестве аргументов описано весьма кратко. Если можно, укажите где можно почитать об этом более подробно. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

&akk1.ucon имеет тип void *

Откуда вдруг void *?

 

О передаче в функции адресов переменных в качестве аргументов описано весьма кратко. Если можно, укажите где можно почитать об этом более подробно.

Увы, учебную литературу не подскажу - как-то так получилось, что ничего, кроме стандарта и справочников, по "C" не читал :(

 

Расскажите, как в программе объявлен akk1, и почему он объявлен именно так.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Расскажите, как в программе объявлен akk1, и почему он объявлен именно так.

 

Переменная akk1 объявлена глобально как структура, почему именно так? Скорее всего исходя из предыдущего опыта:

 

volatile struct

{

byte index;

byte numprg;

byte capind;

byte ucon;

byte hitmpr;

byte error;

byte outzrz;

word maxvlt;

word captr;

word cloc1;

word cloc2;

word tmpair;

dword sumcap;

}akk1;

Изменено пользователем дымок

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А volatile действительно нужен? (Сам факт использования объекта в прерывании не является безусловным к тому показанием.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А volatile действительно нужен? (Сам факт использования объекта в прерывании не является безусловным к тому показанием.)

 

Скорее всего я использую его на всякий случай, а что он может быть проблемой в моёи случае?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так он, собственно, и вызывает ругань в 42-х местах.

 

Спасибо Вам, действительно volatile был всему виной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очень прошу дать ответ на следующий вопрос, почему компилятор в WinAVR ругается на выражение типа: *cloc_prm++;

Однако при просмотре примеров других программ используются именно такие выражения.

Потому мне приходится использовать: *cloc_prm=*cloc_prm+1; в таком виде выражение принимается без проблем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из-за приоритета операций. В Вашем случае следует записывать (*cloc_prm)++

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Из-за приоритета операций. В Вашем случае следует записывать (*cloc_prm)++

 

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уважаемые форумчане, подскажите пожалуйста наиболее оптимальный вариант поиска последовательности нескольких байт.

То есть есть последовательность байт, например

......0x05 0x51 0x12 0x64 0xC0 0x66 0x41..................................................

 

И вот мне нужно найти начало последовательности 0x64 0xC0 0x66

Как это сделать? :smile3046:

Спасибо за внимание.

 

Если нужен действительно наиболее оптимальный вариант, то это алгоритм Бойера-Мура

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Забыл сказать что я использую 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 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;

 

Даже если мы корову назовем тигром, то она все равно не перестанет быть коровой и не начнет есть мясо!!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...