Отговори на тема  [ 6 мнения ] 
Проблем с типовете на C (pic C18) 
Автор Съобщение
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Проблем с типовете на 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

_________________
PIC SPBRG values calculator


Нед Ное 11, 2012 11:57 am
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Яну 25, 2012 9:14 am
Мнения: 5298
Мнение Re: Проблем с типовете на C (pic C18)
във втория пример пробвай дали така ще се сърди пак:
strcpypgm2ram(s, (char *)BL);

_________________
'просто' е технически синоним на 'красиво'


Нед Ное 11, 2012 12:20 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение 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");

_________________
PIC SPBRG values calculator


Последна промяна npelov на Нед Ное 11, 2012 12:32 pm, променена общо 2 пъти



Нед Ное 11, 2012 12:28 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение Re: Проблем с типовете на C (pic C18)
Едит: Писали сме едновременно. Ти си си решил проблема вече


Последна промяна Nikola Kirov на Нед Ное 11, 2012 12:32 pm, променена общо 1 път



Нед Ное 11, 2012 12:29 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: Проблем с типовете на C (pic C18)
въртях го всякак. проблема беше в модела - за компилатора беше near, в header-те far. компилатора прави near pointer-и от ром константите, а функциите очакват far

_________________
PIC SPBRG values calculator


Нед Ное 11, 2012 12:31 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Пет Яну 22, 2010 5:46 pm
Мнения: 680
Мнение Re: Проблем с типовете на C (pic C18)
Е, има още проблеми. Изглежда компилатора се оправя добре с извикване на функции с модел far и near еднакво добре, но нещо не мога да го подкарам с near стринг константи в рома. Като дефинирам функцията с параметър const near rom char * и подам rom константа (като компилатора е с опция -ms за small memory model) не работи. Не съм се замислял подробно но сигурно има разлика когато се извикват функции и четенето от ром-а. Не знам дали чете с tbl командите или чрез INDF но не знае как да си разположи стринг констатите така че да се достъпват с 16 битов указател.

_________________
PIC SPBRG values calculator


Пон Ное 12, 2012 6:27 pm
Профил WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 6 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни