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

 
 
> Передача аргумента в прерывание (язык C), Кто что использует?
Nikitoc
сообщение Nov 27 2010, 20:56
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367



Всем доброго времени суток. Я тут недавно столкнулся с проблемой глобальных переменных, а точнее с тем, что о них всегда нужно помнить (где они инициализируются, где изменяются и т.д.) со всеми вытекающими трудновылавливаемыми глюками. Альтернатива глобальным переменным - передача указателя в функцию. Но вот как передать указатель в подпрограмму обработки прерывания (имеется в виду программа для какого-нибудь микроконтроллера)? Или еще так можно спросить: кто как избавляется от глобальных переменных? Какие есть способы минимизировать их использование? Интересно послушать мнения форумчан.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergeeff
сообщение Nov 29 2010, 07:22
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Ну а я вам такую штуку про оптимизации расскажу. Для меня было большим удивлением. Работаю под MS VS2008 C/C++. Имею библиотеку функций, подключаемую к проекту. Появилась идея написать некий простенький модуль, который выводил бы мне на консоль версию и дату последних изменений файлов библиотеки в svn, и аналогичные модули поместить во все библиотеки, используемые в проекте.

Делаем файл revision.h

Код
#ifndef __REVISION_H__
#define __REVISION_H__

#define REV_STRING   888
#define DATE_STRING  "11:11:11 22-11-2010"
#define LIB_NAME     "aaa.lib"

#endif //__REVISION_H__


файл crevision.h

Код
#ifndef _CREVISION_H_
#define _CREVISION_H_

#include <stdio.h>
#include "revision.h"

class CRevision
{
   public:
   CRevision()
   {
      printf("LIB :: %s, Rev.%d [%s]\n", LIB_NAME, REV_STRING, DATE_STRING);
   }
};          


#endif   // _CREVISION_H_


и, наконец, crevision.cpp

Код
#include "CRevision.h"

const CRevision caaa;


Во всех книгах по C++ написано, что для переменной гарантировано будет вызван конструктор. Так вот: фига с два. Основная программа никогда не обращается к caaa, ее благополучно "соптимизировали" компилятор/линкер.

Если в основной программе объявить

Код
const CRevision caaa;


все работает.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:14
Рейтинг@Mail.ru


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