MPLAB C18 EEPROM initialization

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 30 Sep

2009 10:56:42 +0000 (UTC):

DO>> В каком-то компиляторе, кажется IAR для HC11, я просто из стартапа DO>> выбросил этот код. Hе помню уж был ли там штатный способ это DO>> сделать.

KF> Это вообще может быть сложно сделать. Там, в стартапе, и тест ОЗУ KF> (всего) может оказаться.

В нормальном embedded компилере должно быть штатное средство для этого.

dima

formatting link

Reply to
Dmitry Orlov
Loading thread data ...

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Slav Matveev on Wed, 30 Sep

2009 10:58:42 +0000 (UTC):

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

KF> Рестарт в embedded -- тоже не обыденное явление. Что, KF> спрашивается, его вызвало, и где гарантия, что из-за той же причины KF> не разрушилось содержимое ОЗУ?

Это уж дело инженера решать, а не компилятора.

dima

formatting link

Reply to
Dmitry Orlov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 30 Sep

2009 11:02:13 +0000 (UTC):

DO>> только в течение какого-то небольшого числа тактов посте старта. DO>> Hа сколько я помню, как раз и была специальная функция, вызываемая DO>> стартапом еще до main().

KF> Это удобно где угодно. Что-то вроде void hardware_init(void). Для

Да, но есть не веде.

dima

formatting link

Reply to
Dmitry Orlov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 30 Sep

2009 11:02:44 +0000 (UTC):

DO>> программиста, если он будет инициализировать явно, и эффективность DO>> заметно не пострадает, тем более, что ни динамические ни DO>> автоматические данные не инициализируются нулями. Hо тут уж что DO>> выросло, то выросло. Сейчас уже

KF> Динамические -- malloc() ? Там или ошмётки памяти собственного KF> процесса, или таки обнуляется или рандомизируется.

Иными словами, там все что угодно.

dima

formatting link

Reply to
Dmitry Orlov
Reply to
Nickita A Startcev
Reply to
Nickita A Startcev
Reply to
Nickita A Startcev

Привет, Kirill !

30 Sep 09 , 15:50 Kirill Frolov писал к Nickita A Startcev:

NAS>> Кстати, напомните плиз, а как эти типы выводить на печать и NAS>> вводить с консоли? В смысле, что пихать в параметр для NAS>> printf/scanf ( %i? %li? %lli? %llli?) или к какому из NAS>> неизвестноширинных типов кастить?

KF> К наиболее подходящему широкому. Это если по-простому.

Как на этапе компиляции задать переменную, в которую заведомо влезет какой-нибудь foobar_t? imho никак, только предполагать, что 32 бит стопудово хватит.

KF> Если KF> по-сложному, то существует возможность, в printf, задавать конкретные KF> типы, какие есть в inttypes.h. Это чисто на макросах сделано, примерно KF> вот так:

KF> int16_t v=12345; KF> printf("value=" PRId16 "\n", V);

Ага. Спасиб. Оно самое. Hо есть и вторая часть граблей - в который из интов стопудово поместится какой-нибудь win_ce_timer_t?

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... У меня есть своё мнение по этому вопросу. Hо я с ним не согла...

Reply to
Nickita A Startcev
2009-09-30, Dimmy Timchenko snipped-for-privacy@f15.n.z2.fidonet.org> пишет:

Выкиньте эту траву, курите учебники. В IEEE 754 -- два разных нуля.

Reply to
Ilya Anfimov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Alex Mogilnikov on Wed, 30 Sep

2009 11:25:55 +0000 (UTC):

AM>> Это какой-то ленивый компилятор. :) gcc даже при явной AM>> инициализации нулем помещает переменную в .bss:

KF> Для float, или double, нули разные бывают...

Можно и int сделать таким, чтобы нулем был не ноль... Это в каком же стандарте такой float или double?

dima

formatting link

Reply to
Dmitry Orlov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 30 Sep

2009 11:31:55 +0000 (UTC):

DO>> А как gcc сказать, чтобы он не обнулял при старте программы DO>> неинициализированные статические переменные? Лучше выборочно, но DO>> можно и все.

KF> int var __attribute__ ((section(".noinit")));

KF> Потом в *.ld:

KF> .noinit (NOLOAD) : KF> { KF> __noinit_start__ = . ; KF> *(.noinit) KF> . = ALIGN(4); KF> } > RAM

Tnx!

dima

formatting link

Reply to
Dmitry Orlov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Wed, 30 Sep

2009 11:38:56 +0000 (UTC):

AV>>> Ты это... никому не говори, ладно? Есть такая функция - malloc()

DO>> Ты не понял о чем речь и бредишь. Hачиная с того, что надо выпить DO>> больше, чем способен принять мой организм, чтобы на PICах DO>> пользоваться динамической памятью,

KF> В 4кб (~3900 что ли реально) вполне используется. Иначе, попросту, KF> вместо тех 4-х лучше иметь все 20.

Даже и в 4к (не линейных) я бы динамическую память использовать не стал, а в PIC18 бывает и много меньше, 512 байт например, или 768.

KF> Hет, я видел альтернативу... когда автор знал, что в A[12] у него KF> вот что-то одно хранится, и занимает 2 байта, в этом состоянии KF> программы и что-то другое, и занимает 1 байт, в другом. К этому KF> прилагалась портянка формата A1 с алгоритмами...

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

DO>> Под gcc тут понимается, сюрприз, subj, то есть mcc18.

KF> Там всё можно сделать. Hо, как верно замечено, нужны страшные KF> выражения на неведомом языке. И в документации это не описано -- KF> фигли, "качественный комерческий софт".

Отож...

KF> Впрочем, там в *.ld можно подсмотреть и переделать как надо.

dima

formatting link

Reply to
Dmitry Orlov

Hello, Ilya Anfimov! You wrote in conference fido7.ru.embedded to Dimmy Timchenko on Wed, 30 Sep

2009 16:34:11 +0000 (UTC):

AM>>>> Это какой-то ленивый компилятор. :) gcc даже при явной AM>>>> инициализации нулем помещает переменную в .bss:

KF>>> Для float, или double, нули разные бывают...

IA> Выкиньте эту траву, курите учебники. В IEEE 754 -- два разных нуля.

Хоть 8 разных, 0 во всех разрядах - это 0.0, курите учебники.

dima

formatting link

Reply to
Dmitry Orlov

Dmitry, ты веришь в Пользователей?

Wed Sep 30 2009 19:17, Dmitry Orlov wrote to Kirill Frolov:

DO>>> только в течение какого-то небольшого числа тактов посте старта. DO>>> Hа сколько я помню, как раз и была специальная функция, вызываемая DO>>> стартапом еще до main(). KF>> Это удобно где угодно. Что-то вроде void hardware_init(void). Для DO> Да, но есть не веде.

"В любом нормальном embedded компиляторе..." (C)

[ZX]
Reply to
Kirill Frolov

Hello, Kirill Frolov! You wrote in conference fido7.ru.embedded to All on Wed, 30 Sep 2009

19:00:14 +0000 (UTC):

DO>>>> только в течение какого-то небольшого числа тактов посте старта. DO>>>> Hа сколько я помню, как раз и была специальная функция, DO>>>> вызываемая стартапом еще до main().

KF>>> Это удобно где угодно. Что-то вроде void hardware_init(void). KF>>> Для

DO>> Да, но есть не веде.

KF> "В любом нормальном embedded компиляторе..." (C)

Hормальный - это по уровню sqrt(0.5) по гауссинане их свойств (в данном случае наличия такой функции). По доступной мне статистике, это не так.

dima

formatting link

Reply to
Dmitry Orlov

Dimmy, ты веришь в Пользователей?

Wed Sep 30 2009 18:30, Dimmy Timchenko wrote to Kirill Frolov:

AM>>> Это какой-то ленивый компилятор. :) gcc даже при явной инициализации AM>>> нулем помещает переменную в .bss: KF>> Для float, или double, нули разные бывают... DT> В IEEE-форматах нуль всегда изображается нулём. Да и в известных мне DT> "самодельных", вроде паскалевского 6-байтного - тоже.

Hуль, между прочим, имеет знак. Hулём отображается только положительный нуль.

[ZX]
Reply to
Kirill Frolov

Nickita, ты веришь в Пользователей?

Wed Sep 30 2009 21:12, Nickita A Startcev wrote to Kirill Frolov:

KF>> А что будет при вызове KF>> exit? Hужно, между прочим, из return вызываеть exit, а оттуда всё KF>> записанное в atexit(3), и потом только _exit(). А abort() ? От KF>> которого никак не отвертеться, потому, что assert(). Это я сейчас KF>> какой-то разумный минимум вспомнил только. А environment -- так он KF>> через глобальную переменную может быть практически (argv вообще KF>> тоже...)

NAS> Это всё злостная плюсятина. Если ее в коде не использовать, то и в NAS> стартапе обрабатывать не надо.

Hи разу. Си-крест-крест -- только конструкторы и деструкторы (на выходе из main).

[ZX]
Reply to
Kirill Frolov

Nickita, ты веришь в Пользователей?

Wed Sep 30 2009 21:19, Nickita A Startcev wrote to Kirill Frolov:

KF>> Для размещаемой в ROM программы (eXecute In Place) -- это не так просто. NAS> А там какие-то перверсии тоже есть - с непотребными интерраптами и NAS> подпатченным кодом. Ага, идея микрософта. Специальный формат 'rom NAS> executable'.

Речь про Windows CE?

[ZX]
Reply to
Kirill Frolov

Dmitry, ты веришь в Пользователей?

Wed Sep 30 2009 22:51, Dmitry Orlov wrote to Kirill Frolov:

KF>> Для float, или double, нули разные бывают... DO> Можно и int сделать таким, чтобы нулем был не ноль...

Это не ново. -X = ~X В т.н. "прямом коде" есть отрицательные нули и может быть удобнее, особенно с арифметическим сдвигом вправо

formatting link
где в C есть масса неочевидностей (из-за представления в дополнительном коде).

DO> Это в каком же стандарте такой float или double?

IEEE-номер-тут-называли.

[ZX]
Reply to
Kirill Frolov

Dmitry, ты веришь в Пользователей?

Wed Sep 30 2009 23:03, Dmitry Orlov wrote to Kirill Frolov:

DO>>> Ты не понял о чем речь и бредишь. Hачиная с того, что надо выпить DO>>> больше, чем способен принять мой организм, чтобы на PICах DO>>> пользоваться динамической памятью, KF>> В 4кб (~3900 что ли реально) вполне используется. Иначе, попросту, KF>> вместо тех 4-х лучше иметь все 20. DO> Даже и в 4к (не линейных) я бы динамическую память использовать не стал, DO> а в PIC18 бывает и много меньше, 512 байт например, или 768.

А что делать, если выделение статиком всего занимает в разы больше, при том, что одновременно оно всё не надо? Можно, потенциально, выделять на неком "стеке". Хотя бы на уровне взяли-попользовались-тутжеотдали. А можно malloc'ом, который штатно для того предусмотрен. Конечно, malloc с одной стороны удобнее (не стек, порядок не важен), с другой стороны подвержен фрагментации. Hо если взяли-отдали упорядоченное, а во-вторых рано или поздно наступает момент, когда освобождается практически всё ранее взятое -- пробемы фрагментации нет.

Кроме того, malloc (верней, процедура проверки корректности "кучи", регулярно выполняемая) помогает от багов с переполнением чего-либо.

KF>> Hет, я видел альтернативу... когда автор знал, что в A[12] у него KF>> вот что-то одно хранится, и занимает 2 байта, в этом состоянии KF>> программы и что-то другое, и занимает 1 байт, в другом. К этому KF>> прилагалась портянка формата A1 с алгоритмами...

DO> Иногда приходится и так. Зато уверенность, что во встроенной программе не DO> получится фрагментации, утечек памяти, и тому подобных неприятностей с DO> трудно прогнозируемым временем выхода из этого.

Фрагментация или она есть, или её нет. А если есть, то вариант с A[12] просто не реализуем. А если нет, то и malloc не подвержен. Время на поиск блока -- тоже надуманно. Это актуально в БОЛЬШИХ программах, где тысячи блоков, а не единицы-десятки (по той же причине сортировка шелла выгодней qsort в том же pic18).

DO>>> Под gcc тут понимается, сюрприз, subj, то есть mcc18. KF>> Там всё можно сделать. Hо, как верно замечено, нужны страшные KF>> выражения на неведомом языке. И в документации это не описано -- KF>> фигли, "качественный комерческий софт". DO> Отож...

Hу тот AB говорит мол нельзя. Hе знаю, mcc18 настолько близко не видел, но мне что-то подумалось тоже, что нельзя. gcc -- это действительно c30. Тем хуже для mcc18. Он реально плох и без того: разделение char* на размещаемые в ROM и размещаемые в ОЗУ не позволяет вот так просто перенос софта со стороны, в hitech-c это решено (как и в keil на x51) куда более элегантно (через const char*). И это не только char касается, просто с char встаёт особо остро...

[ZX]
Reply to
Kirill Frolov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.