| Микроконтролери и електроника 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:
Опитах и така:
Проблема е във втория параметър защото ги разделих на два реда и ми показва реда с втория параметър Винаги изкарва: 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 се променя:
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/ |
|