Показано с 1 по 10 из 24

Тема: Pointer-константа: как инициализировать?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Потому, что на этапе компиляции я не могу знать, к какой сущности я обращусь.
    тогда повторю вопрос. зачем вам глобальные константные указатели, значения которых вам прекрасно известны, и которые не могут измениться на этапе выполнения?

    О своей задаче я немного говорил здесь.
    в приведенной ссылке, как и в этой ветке, есть только ваши попытки решить какую-то неизвестную нам задачу, но не сама задача.

  2. #2
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Хорошо. Там действительно не все понятно, я думаю.

    Итак, у меня в программе есть большое количество переменных (я их называю параметрами), к которым я боращаюсь обычным образом. Беру их значение, использую в выражениях, записываю, сохраняю в RETAIN или нет - все чин чинарем.
    Но именно эти переменные-параметры объединяет то, что в определенных функциях (очень иногда, кстати) обращаться к ним удобно через индекс, как к элементам массива. И при этом существует ряд свойств каждого параметра, которые задаются еще до компиляции. Ну, например, предельные значения параметра. Эти свойства извлекать тогда тоже удобно из массива - по тому же индексу.

    Так вот, есть массив структур, содержащих все свойства каждого параметра:

    Код:
    TYPE PARSCRIPT :
    STRUCT
    	Numb:	WORD;
    	Typ:		PARTYPE;
    	Point:	BYTE;
    	Mdf:		RW_ACCESS;
    	Node:	OWNER_NODE;
    	Mini:		DINT;
    	Maxi:		DINT;
    	Ptr:		POINTER TO DWORD;	
    END_STRUCT
    END_TYPE
    Вот объявление этого массива:

    Код:
    VAR_GLOBAL
    	apsPar: ARRAY [0..MAX_PAR_INDX] OF PARSCRIPT;
    END_VAR
    Используя где-то в проге [I]apsPar.Ptr, я могу извлечь самое переменную или записать ее на свое место. По указателю, коим является элемент структуры [I]apsPar.Ptr.

    Как видите, указатели-то указывают на адрес переменной, вполне фиксированный. Вот я и говорил о том, что объявить массив структур вполне можно было с CONSTANT.
    Оказалось, что можно. Но только инициализировать пойнтер значением адреса данных (любых - хоть констант, хоть переменных) - нельзя.

    Сам не знаю, зачем так подробно поясняю. Все равно сейчас Вы воскликнете "Проект - в студию!"
    И что после этого? У Вас есть предположения, как же объявить константный указатель? Отвлекаясь от того, нафига он мне

  3. #3

    По умолчанию

    вы опять описываете реализацию, а не задачу, ну да ладно.

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

  4. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    ну, как умею.

    Цитата Сообщение от дмитрий егоренков Посмотреть сообщение
    против ограничений платформы не попрешь -- придется вам инициализировать указатели при запуске программы.
    так и делаю. тешу себя тем, что плюсов у выбранной платформы очень много и они для меня важнее.
    вчера меня так уговаривали попробовать другие контроллеры (и российские есть), в том числе и с линухом на борту, и с экраном и без, и манюсенькие, и лишь чуть дороже плк100...
    на шару ведь дают, только пробуй. но почему-то кдс мне нравится (сейчас пока могу сказать - не на уровне понимания, а так, за красивые глазки) и я с гордым видом отказался
    надо довести хоть первый проект до конца, тогда можно оглядеться еще раз.

  5. #5

    По умолчанию

    Цитата Сообщение от Дмитрий Егоренков Посмотреть сообщение
    -- придется вам инициализировать указатели при запуске программы.
    Была бы определённая функция (типа Setup как в Arduino) выполняемая один раз при старте контроллера, и засорять инициализацией PLC_PRG не пришлось бы..
    Да и на ФБ конструкторов не хватает, и метод инициализации для них не сделаешь, так как методам незя аргументы передать... Усё приходится делать через ЖЖЖ..

  6. #6
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    о! так давайте спрошу.

    я думаю, что, если в проекте есть программа Sfc, то в ней шаг Init - выполняется единожды?

    а второй путь, который я понимаю, это проверять некий бит, инициализуемый нулем при старте программы. и по нему выполнять разовые процедур, не забыв его тоже взвести.
    это, конечно, известно. пишу потому, что вот это свойство плк замечать пропадание питания и прятать свои переменные на 10 минут - меня смущает. ведь с ними сохраняется и тот бит. а потом у меня (с моими багами, конечно) как-то получается, что программа не всегда перестартовует предсказуемо. повторяю - пока это наблюдения в сырой программе. возможно, перед выключением я уже там напортил и честное восстановление процессором всего озу уже не поможет...
    но все же - есть какие-то подводные камни в описанной инициализации?

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •