Do you have a question? Post it now! No Registration Necessary

Re: AVR ADC & IAR2.28
Hello, Askold Volkov !
> DO> А, тогда понятно. Hепонятно только почему в ide, уже если ее сделали,
> DO> не внести все крыжики.
> Точно ответить могут только авторы, я же могу только высказать свои догадки.
> Во-первых, это свежая опция, возможно ее просто не успели внести в
> IDE к моменту его выпуска. Во-вторых IARовцы очень долго сопротивлялись
> ее введению, считая идеологически неправильной, и сделали это только
> под давлением пользователей. И действительно - включение этой опции
> противоречит стандарту языка.
А копировать ОЗУ константные строки или хотя бы указатели на них противоречит
здравому смыслу. Особенно, если это не опционально.
> DO> Видимо пора от нее отказываться к чертовой матери, не дожидаясь
> DO> перитонита. Собственно от линковки с установленными крыжиками уже
> DO> пришлось отказаться - оно проесто перестало линковаться, и с идущим
> DO> линк-файлом тоже. Пришлось править...
> Странно. А я из среды собираю и ничего.
Может я опять что-то сделал не так, но с некоторого момента (точнее с момента,
когда появились массивы строк) среда стала ругаться, что в каком-то там тини
сегменте мало места. Я поставил модель small, после чего, она стала ругаться
что не знает куда девать сегмент NEAR_Z кажется. Указание соответствующего
линк-файла не помогло, помогло прописывание в нем этого сегмента.
С уважением, Дима Орлов.
> DO> А, тогда понятно. Hепонятно только почему в ide, уже если ее сделали,
> DO> не внести все крыжики.
> Точно ответить могут только авторы, я же могу только высказать свои догадки.
> Во-первых, это свежая опция, возможно ее просто не успели внести в
> IDE к моменту его выпуска. Во-вторых IARовцы очень долго сопротивлялись
> ее введению, считая идеологически неправильной, и сделали это только
> под давлением пользователей. И действительно - включение этой опции
> противоречит стандарту языка.
А копировать ОЗУ константные строки или хотя бы указатели на них противоречит
здравому смыслу. Особенно, если это не опционально.
> DO> Видимо пора от нее отказываться к чертовой матери, не дожидаясь
> DO> перитонита. Собственно от линковки с установленными крыжиками уже
> DO> пришлось отказаться - оно проесто перестало линковаться, и с идущим
> DO> линк-файлом тоже. Пришлось править...
> Странно. А я из среды собираю и ничего.
Может я опять что-то сделал не так, но с некоторого момента (точнее с момента,
когда появились массивы строк) среда стала ругаться, что в каком-то там тини
сегменте мало места. Я поставил модель small, после чего, она стала ругаться
что не знает куда девать сегмент NEAR_Z кажется. Указание соответствующего
линк-файла не помогло, помогло прописывание в нем этого сегмента.
С уважением, Дима Орлов.

Re: AVR ADC & IAR2.28
Hello, Askold Volkov !
> AK> Это еще каким местом противоречит ?
> противоречит тем местом, что по стандарту С строковый литерал - это char*, а
> если он лежит во flash, это уже не char*, а "char __flash *" и передавать
> его функции, имеющей параметр типа char* нельзя. Hе пойму, правда,
> что помешало IARовцам автоматически выбирать нужный тип в зависимости
> от контекста.
Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с их же,
правда очень очень старым компилятором для 51 и там указатели были трехбайтные.
В первом байте была информация о том где лежат данные.
С уважением, Дима Орлов.
> AK> Это еще каким местом противоречит ?
> противоречит тем местом, что по стандарту С строковый литерал - это char*, а
> если он лежит во flash, это уже не char*, а "char __flash *" и передавать
> его функции, имеющей параметр типа char* нельзя. Hе пойму, правда,
> что помешало IARовцам автоматически выбирать нужный тип в зависимости
> от контекста.
Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с их же,
правда очень очень старым компилятором для 51 и там указатели были трехбайтные.
В первом байте была информация о том где лежат данные.
С уважением, Дима Орлов.

Re: AVR ADC & IAR2.28
Всем привет!
Dima Orlov писал к Askold Volkov Sat, 31 Jan 2004 22:46:00 +0300:
??>> противоречит тем местом, что по стандарту С строковый литерал - это
??>> char*, а если он лежит во flash, это уже не char*, а "char __flash *"
??>> и передавать его функции, имеющей параметр типа char* нельзя. Hе
??>> пойму, правда, что помешало IARовцам автоматически выбирать нужный тип
??>> в зависимости от контекста.
DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
DO> их же, правда очень очень старым компилятором для 51 и там указатели
DO> были трехбайтные. В первом байте была информация о том где лежат
DO> данные.
Дык это у них и тут есть. Указатель типа __generic называется. Давно
грозятся еще и такую модель памяти сделать. Но я не о том. Ведь вполне можно
было бы сделать, чтобы если в программе написано
char* a="qwerty";
или
void puts(char* str);
puts("hello");
строка размещалась бы в ОЗУ как и сейчас, а если
char __flash * b="asdf";
или
void puts_P(char __flash * str);
puts_P("hello");
то во flash. Ведь понимают же они:
char aaa[]="qwerty";
и
char __flash bbb[]="asdf";
Dima Orlov писал к Askold Volkov Sat, 31 Jan 2004 22:46:00 +0300:
??>> противоречит тем местом, что по стандарту С строковый литерал - это
??>> char*, а если он лежит во flash, это уже не char*, а "char __flash *"
??>> и передавать его функции, имеющей параметр типа char* нельзя. Hе
??>> пойму, правда, что помешало IARовцам автоматически выбирать нужный тип
??>> в зависимости от контекста.
DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
DO> их же, правда очень очень старым компилятором для 51 и там указатели
DO> были трехбайтные. В первом байте была информация о том где лежат
DO> данные.
Дык это у них и тут есть. Указатель типа __generic называется. Давно
грозятся еще и такую модель памяти сделать. Но я не о том. Ведь вполне можно
было бы сделать, чтобы если в программе написано
char* a="qwerty";
или
void puts(char* str);
puts("hello");
строка размещалась бы в ОЗУ как и сейчас, а если
char __flash * b="asdf";
или
void puts_P(char __flash * str);
puts_P("hello");
то во flash. Ведь понимают же они:
char aaa[]="qwerty";
и
char __flash bbb[]="asdf";
--
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /

Re: AVR ADC & IAR2.28
Привет, 31 января 2004 г., 22:46:00, ты писал(а):
>> противоречит тем местом, что по стандарту С строковый литерал -
>> это char*, а
>> если он лежит во flash, это уже не char*, а "char __flash *" и
>> передавать
>> его функции, имеющей параметр типа char* нельзя. Hе пойму, правда,
>> что помешало IARовцам автоматически выбирать нужный тип в зависимости
>> от контекста.
DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
DO> их же,
DO> правда очень очень старым компилятором для 51 и там указатели были
DO> трехбайтные.
DO> В первом байте была информация о том где лежат данные.
В IAR AVR тоже есть, см. __generic
Всего хорошего.
>> противоречит тем местом, что по стандарту С строковый литерал -
>> это char*, а
>> если он лежит во flash, это уже не char*, а "char __flash *" и
>> передавать
>> его функции, имеющей параметр типа char* нельзя. Hе пойму, правда,
>> что помешало IARовцам автоматически выбирать нужный тип в зависимости
>> от контекста.
DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
DO> их же,
DO> правда очень очень старым компилятором для 51 и там указатели были
DO> трехбайтные.
DO> В первом байте была информация о том где лежат данные.
В IAR AVR тоже есть, см. __generic
Всего хорошего.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: AVR ADC & IAR2.28
Hello, Askold Volkov !
> ??>> противоречит тем местом, что по стандарту С строковый литерал - это
> ??>> char*, а если он лежит во flash, это уже не char*, а "char __flash *"
> ??>> и передавать его функции, имеющей параметр типа char* нельзя. Hе
> ??>> пойму, правда, что помешало IARовцам автоматически выбирать нужный тип
> ??>> в зависимости от контекста.
> DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
> DO> их же, правда очень очень старым компилятором для 51 и там указатели
> DO> были трехбайтные. В первом байте была информация о том где лежат
> DO> данные.
> Дык это у них и тут есть. Указатель типа __generic называется.
Тогда непонятно какого хрена они так делают. Другие компиляторы без лишних
разговоров const char * размещают в ПЗУ,а тут из-за какой-то непонятной
упертости надо через задницу все писать. Вообще по-моему, куда разумнее
прагмами указывать в каком сегменте должны размещаться нижеописанные данные
(код). И кое-где так и сделано.
> Давно грозятся еще и такую модель памяти сделать. Hо я не о том. Ведь
> вполне можно было бы сделать, чтобы если в программе написано
> char* a="qwerty";
> или
> void puts(char* str);
> puts("hello");
> строка размещалась бы в ОЗУ как и сейчас, а если
> char __flash * b="asdf";
> или
> void puts_P(char __flash * str);
> puts_P("hello");
> то во flash. Ведь понимают же они:
> char aaa[]="qwerty";
> и
> char __flash bbb[]="asdf";
Да, непостижимо. Сейчас вот переписал свою программку в этом угробищном стиле.
Только на правильно размещенных данных экономится более сотни байт ОЗУ и
изрядное количество кода. И с АЦП помогло, откуда я это ==1 взял, ума не
приложу, ССЗБ...
Еще вопрос. Тут кто-то написал, что no_init работает только для внешней памяти.
Это действительно так? Я вижу, что мап-файл получается разный при использовании
этого модификатора и без него, но глуже в сгенерированный код не лез пока...
Или спокойнее вообще убрать из стартапа эту автоинициализацию?
С уважением, Дима Орлов.
> ??>> противоречит тем местом, что по стандарту С строковый литерал - это
> ??>> char*, а если он лежит во flash, это уже не char*, а "char __flash *"
> ??>> и передавать его функции, имеющей параметр типа char* нельзя. Hе
> ??>> пойму, правда, что помешало IARовцам автоматически выбирать нужный тип
> ??>> в зависимости от контекста.
> DO> Видимо желание сделать двухбайтный указатель. Хотя когда-то я работал с
> DO> их же, правда очень очень старым компилятором для 51 и там указатели
> DO> были трехбайтные. В первом байте была информация о том где лежат
> DO> данные.
> Дык это у них и тут есть. Указатель типа __generic называется.
Тогда непонятно какого хрена они так делают. Другие компиляторы без лишних
разговоров const char * размещают в ПЗУ,а тут из-за какой-то непонятной
упертости надо через задницу все писать. Вообще по-моему, куда разумнее
прагмами указывать в каком сегменте должны размещаться нижеописанные данные
(код). И кое-где так и сделано.
> Давно грозятся еще и такую модель памяти сделать. Hо я не о том. Ведь
> вполне можно было бы сделать, чтобы если в программе написано
> char* a="qwerty";
> или
> void puts(char* str);
> puts("hello");
> строка размещалась бы в ОЗУ как и сейчас, а если
> char __flash * b="asdf";
> или
> void puts_P(char __flash * str);
> puts_P("hello");
> то во flash. Ведь понимают же они:
> char aaa[]="qwerty";
> и
> char __flash bbb[]="asdf";
Да, непостижимо. Сейчас вот переписал свою программку в этом угробищном стиле.
Только на правильно размещенных данных экономится более сотни байт ОЗУ и
изрядное количество кода. И с АЦП помогло, откуда я это ==1 взял, ума не
приложу, ССЗБ...
Еще вопрос. Тут кто-то написал, что no_init работает только для внешней памяти.
Это действительно так? Я вижу, что мап-файл получается разный при использовании
этого модификатора и без него, но глуже в сгенерированный код не лез пока...
Или спокойнее вообще убрать из стартапа эту автоинициализацию?
С уважением, Дима Орлов.

Re: AVR ADC & IAR2.28
Всем привет!
Dima Orlov писал к Askold Volkov Sun, 01 Feb 2004 12:25:00 +0300:
??>> Дык это у них и тут есть. Указатель типа __generic называется.
DO> Тогда непонятно какого хрена они так делают.
ну... неэффективно это - постоянно проверять тип указателя и использовать
разные командв для обращения. Да и этот __generic указатель у них тоже через
задницу сделан и позволяет не ко всей памяти обращаться.
DO> писать. Вообще по-моему, куда разумнее прагмами указывать в каком
DO> сегменте должны размещаться нижеописанные данные (код). И кое-где так и
DO> сделано.
а такие прагмы в IARе тоже есть
DO> Еще вопрос. Тут кто-то написал, что no_init работает только для внешней
DO> памяти. Это действительно так?
данные, описанные как __no_init просто размещаются в отдельном сегменте и не
инициализируются. А разместить этот сегмент можно в любом месте, указав это
линкеру.
DO> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
а чем она тебе помешала?
Dima Orlov писал к Askold Volkov Sun, 01 Feb 2004 12:25:00 +0300:
??>> Дык это у них и тут есть. Указатель типа __generic называется.
DO> Тогда непонятно какого хрена они так делают.
ну... неэффективно это - постоянно проверять тип указателя и использовать
разные командв для обращения. Да и этот __generic указатель у них тоже через
задницу сделан и позволяет не ко всей памяти обращаться.
DO> писать. Вообще по-моему, куда разумнее прагмами указывать в каком
DO> сегменте должны размещаться нижеописанные данные (код). И кое-где так и
DO> сделано.
а такие прагмы в IARе тоже есть
DO> Еще вопрос. Тут кто-то написал, что no_init работает только для внешней
DO> памяти. Это действительно так?
данные, описанные как __no_init просто размещаются в отдельном сегменте и не
инициализируются. А разместить этот сегмент можно в любом месте, указав это
линкеру.
DO> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
а чем она тебе помешала?
--
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /

Re: AVR ADC & IAR2.28
Hello, Askold Volkov !
> ??>> Дык это у них и тут есть. Указатель типа __generic называется.
> DO> Тогда непонятно какого хрена они так делают.
> ну... неэффективно это - постоянно проверять тип указателя и использовать
> разные командв для обращения. Да и этот __generic указатель у них
А объявленное константой содержимое ПЗУ в ОЗУ копировать эффективно? Это очень
зависит...
> тоже через задницу сделан и позволяет не ко всей памяти обращаться.
Hу так long'ом бы его сделали... Если уж такая борьба за совместимость.
> DO> писать. Вообще по-моему, куда разумнее прагмами указывать в каком
> DO> сегменте должны размещаться нижеописанные данные (код). И кое-где так и
> DO> сделано.
> а такие прагмы в IARе тоже есть
Я что-то не встретил, правда целиком конечно описание компилятора не читал.
Вообще удручает практически полное отсутствие примеров... Особенно примеров
применения нестандартных вещей. Прерываний, распредения памяти, etc.
> DO> Еще вопрос. Тут кто-то написал, что no_init работает только для внешней
> DO> памяти. Это действительно так?
> данные, описанные как __no_init просто размещаются в отдельном сегменте и не
> инициализируются. А разместить этот сегмент можно в любом месте, указав это
> линкеру.
Тогда нормально.
> DO> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
> а чем она тебе помешала?
Лишний код. Я то, что нужно обычно инициализирую явно, причем совсем не
обязательно нулями. И не люблю, чтобы при сбросе без снятия питания все
переинициализировалось.
С уважением, Дима Орлов.
> ??>> Дык это у них и тут есть. Указатель типа __generic называется.
> DO> Тогда непонятно какого хрена они так делают.
> ну... неэффективно это - постоянно проверять тип указателя и использовать
> разные командв для обращения. Да и этот __generic указатель у них
А объявленное константой содержимое ПЗУ в ОЗУ копировать эффективно? Это очень
зависит...
> тоже через задницу сделан и позволяет не ко всей памяти обращаться.
Hу так long'ом бы его сделали... Если уж такая борьба за совместимость.
> DO> писать. Вообще по-моему, куда разумнее прагмами указывать в каком
> DO> сегменте должны размещаться нижеописанные данные (код). И кое-где так и
> DO> сделано.
> а такие прагмы в IARе тоже есть
Я что-то не встретил, правда целиком конечно описание компилятора не читал.
Вообще удручает практически полное отсутствие примеров... Особенно примеров
применения нестандартных вещей. Прерываний, распредения памяти, etc.
> DO> Еще вопрос. Тут кто-то написал, что no_init работает только для внешней
> DO> памяти. Это действительно так?
> данные, описанные как __no_init просто размещаются в отдельном сегменте и не
> инициализируются. А разместить этот сегмент можно в любом месте, указав это
> линкеру.
Тогда нормально.
> DO> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
> а чем она тебе помешала?
Лишний код. Я то, что нужно обычно инициализирую явно, причем совсем не
обязательно нулями. И не люблю, чтобы при сбросе без снятия питания все
переинициализировалось.
С уважением, Дима Орлов.

Re: AVR ADC & IAR2.28
Всем привет!
Dima Orlov писал к Askold Volkov 01.02.2004:
DO> А объявленное константой содержимое ПЗУ в ОЗУ копировать эффективно?
DO> Это очень зависит...
DO> Hу так long'ом бы его сделали... Если уж такая борьба за совместимость.
А чего ты со мной-то споришь? Ты это IARовцам попробуй объяснить :)
DO>>> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
>> а чем она тебе помешала?
DO> Лишний код. Я то, что нужно обычно инициализирую явно, причем совсем не
DO> обязательно нулями.
Ну ты тут прямо как Шепелев :) Лишнего кода там байт 10. Все, не
инициализированное явно, там размещается подряд и прописывается нулями в
цикле. А все явно инициализированное тоже размещается подряд и в цикле же
копируется из flash, что явно эффективнее, чем инициализировать вручную и
по-отдельности.
Dima Orlov писал к Askold Volkov 01.02.2004:
DO> А объявленное константой содержимое ПЗУ в ОЗУ копировать эффективно?
DO> Это очень зависит...
DO> Hу так long'ом бы его сделали... Если уж такая борьба за совместимость.
А чего ты со мной-то споришь? Ты это IARовцам попробуй объяснить :)
DO>>> Или спокойнее вообще убрать из стартапа эту автоинициализацию?
>> а чем она тебе помешала?
DO> Лишний код. Я то, что нужно обычно инициализирую явно, причем совсем не
DO> обязательно нулями.
Ну ты тут прямо как Шепелев :) Лишнего кода там байт 10. Все, не
инициализированное явно, там размещается подряд и прописывается нулями в
цикле. А все явно инициализированное тоже размещается подряд и в цикле же
копируется из flash, что явно эффективнее, чем инициализировать вручную и
по-отдельности.
--
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /
Аскольд Волков, Новосибирск. http://www.inp.nsk.su/~volkov /
Site Timeline
- » XC9500XL
- — Next thread in » Microcontrollers (Russian)
-
- » измерение напряжения от -20В да +20В контроллером с АЦП...
- — Previous thread in » Microcontrollers (Russian)
-
- » По моему это гениально
- — Newest thread in » Microcontrollers (Russian)
-
- » (PDF) Atlas of Upper Gastrointestinal and Hepato Surgery 2nd Ed by CLAVIEN
- — The site's Newest Thread. Posted in » Electronics (Polish)
-
- » (PDF) Aesthetic Surgery Techniques - A Case-Based Approach by James D. Fra...
- — The site's Last Updated Thread. Posted in » Embedded Programming
-