Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Проблем с типовете на C (pic C18)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=10683
Страница 1 от 1

Автор:  npelov [ Нед Ное 11, 2012 11:57 am ]
Заглавие:  Проблем с типовете на C (pic C18)

Ей това нещо постоянно изкарва warning:
Код:
  char s[20];
  strcpypgm2ram(s, "BL:             ");

Опитах и така:
Код:
  rom static const char *BL = "BL:             ";
  strcpypgm2ram(s, BL);



Проблема е във втория параметър защото ги разделих на два реда и ми показва реда с втория параметър

Винаги изкарва:
Warning [2066] type qualifier mismatch in assignment

Автор:  Н'бабане Гт'муан'га [ Нед Ное 11, 2012 12:20 pm ]
Заглавие:  Re: Проблем с типовете на C (pic C18)

във втория пример пробвай дали така ще се сърди пак:
strcpypgm2ram(s, (char *)BL);

Автор:  npelov [ Нед Ное 11, 2012 12:28 pm ]
Заглавие:  Re: Проблем с типовете на C (pic C18)

Намерих проблема. Оказа се, че MEM_MODEL е дефиниран като far в два файла - string.h и в stdio.h. за да го промениш трябва да промениш системните header файлове. Разбира се може винаги да ползваш far указатели, но е идиотско когато контролера има само 16к (по-малко от 64к).

Ако някой още се чуди как да поправи този warning:
1. смяна на модела на near:
1.1 в stdio.h и string.h се променя:
Код:
#ifndef MEM_MODEL
#define MEM_MODEL far
#endif

1.2 дефинира се в съответната програма (най-добре в config.h, който се include-ва преди каквото и да е друго във всеки C файл)
#define MEM_MODEL near

2. Ако се ползва far model
добавя се -mL към опциите на компилатора (или от Build Options, tab MPLAB C18, Category: Memory Model се избира Large Code)

3. Ако се наложи да се ползват и near, и far каст-а от near към far e нещо подобно:
strcpypgm2ram(s, (const rom far char *)"a string");

Автор:  Nikola Kirov [ Нед Ное 11, 2012 12:29 pm ]
Заглавие:  Re: Проблем с типовете на C (pic C18)

Едит: Писали сме едновременно. Ти си си решил проблема вече

Автор:  npelov [ Нед Ное 11, 2012 12:31 pm ]
Заглавие:  Re: Проблем с типовете на C (pic C18)

въртях го всякак. проблема беше в модела - за компилатора беше near, в header-те far. компилатора прави near pointer-и от ром константите, а функциите очакват far

Автор:  npelov [ Пон Ное 12, 2012 6:27 pm ]
Заглавие:  Re: Проблем с типовете на C (pic C18)

Е, има още проблеми. Изглежда компилатора се оправя добре с извикване на функции с модел far и near еднакво добре, но нещо не мога да го подкарам с near стринг константи в рома. Като дефинирам функцията с параметър const near rom char * и подам rom константа (като компилатора е с опция -ms за small memory model) не работи. Не съм се замислял подробно но сигурно има разлика когато се извикват функции и четенето от ром-а. Не знам дали чете с tbl командите или чрез INDF но не знае как да си разположи стринг констатите така че да се достъпват с 16 битов указател.

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/