| Автор |
Съобщение |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Каква е тая тъпотия??
Скъса ми нервичките направо Значи постановката е: компилатор ХС32 1.32 върху PIC32MX150 Съществува един статично обявен глобален масив от тип (unsigned char). Има също една глобална променлива pData от тип (unsigned char *) която винаги сочи някъде вътре в тоя масив на валидна позиция. Също е важно да се знае следната дефиниция: Изпълнението безусловно гърми на тоя ред: При това гърми така яко при дебъг, че само рестарт на мплаба го оправя. Същия код, компилиран и изпълнен в CodeBlocks си е бетон. Просто блокирах на това... Някой да помогне с идея?
_________________ 'просто' е технически синоним на 'красиво'
|
| Съб Юли 26, 2014 12:26 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: Каква е тая тъпотия??
Най-вероятно подравняване (alignment).
EDIT: Виж това "pData" преди да гръмне дали е подравнено на 4. Ако не, най-вероятно генерираш и exception по случая.
|
| Съб Юли 26, 2014 12:46 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
А, може да е това! pData адрес .....833, демек няма подравняване. Има ли някаква специална опция за ХС32 дето да му кажа че не искам да ми подравнява данните?
_________________ 'просто' е технически синоним на 'красиво'
|
| Съб Юли 26, 2014 12:52 pm |
|
 |
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 2:55 pm Мнения: 1792 Местоположение: София
|
 Re: Каква е тая тъпотия??
Ти всъщност искаш подравняване, M4K друго не разбира. Просто си подравни глобалния масив: https://gcc.gnu.org/onlinedocs/gcc/Vari ... butes.html
|
| Съб Юли 26, 2014 12:58 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: Каква е тая тъпотия??
Ако е exception можеш да го хванеш с кода, който например използвам:  |  |  |  | Цитат: const static char *szException[] = { "Interrupt", // 0 "Unknown", // 1 "Unknown", // 2 "Unknown", // 3 "Address error exception (load or ifetch)", // 4 "Address error exception (store)", // 5 "Bus error (ifetch)", // 6 "Bus error (load/store)", // 7 "Syscall", // 8 "Breakpoint", // 9 "Reserved instruction", // 10 "Coprocessor unusable", // 11 "Arithmetic overflow", // 12 "Trap (possible divide by zero)", // 13 "Unknow", // 14 "Unknow", // 15 "Implementation specific 1", // 16 "CorExtend Unuseable", // 17 "Coprocessor 2" // 18 };
volatile static unsigned int codeException; volatile static unsigned int addressException;
// _general_exception_handler() function overrides the normal // _weak_ generic handler void __attribute__((nomips16)) _general_exception_handler(void) { const char *pszExcept;
asm volatile("mfc0 %0,$13" : "=r" (codeException)); asm volatile("mfc0 %0,$14" : "=r" (addressException));
// Examine codeException to identify the type of exception // Examine addressException to find the address that caused the exception codeException = (codeException & 0x0000007C) >> 2; if( codeException < 19 ) { pszExcept = szException[codeException]; mprintf("\nException '%s' happen at address %.4X", pszExcept, addressException ); } while( 1 ) { } }
|  |  |  |  |
A с CodeBlocks какъв toolchain използваш ? А с MPLAB C32 v2.xx гърми ли кода, пробвал ли си там ?
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Юли 26, 2014 3:12 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
Мерси, ще го пробвам. В CodeBlocks съм с тоя дето си идва с него - GCC 4.8.1 Пробвал съм и с С32 2.02 - същата работа засега.
_________________ 'просто' е технически синоним на 'красиво'
|
| Нед Юли 27, 2014 1:42 am |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: Каква е тая тъпотия??
Подравняване, което "почти" не зависи от компилатора можеш да направиш, ако декларираш union, като единият мембър ти е напр. long, другият е твоят масив. За да не пишеш всеки път my_union.my_array[x] може да напишеш макрос #define array my_union.my_array
|
| Нед Юли 27, 2014 9:01 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11265 Местоположение: Добрич
|
 Re: Каква е тая тъпотия??
Това дали да гърми или да не гърми при неподравнен достъп си е изцяло функция на ядрото, която предполагам може да се включва и изключва. Поне при някои други архитектури е така. Компилаторите нямат пръст в тая работа (освен ако не очаквате компилаторът да ви настрои всичко, да изпере, изчисти и да сготви...) По-скоро компилаторът може да генерира различен (8/16/32) код за достъп според указанията на задклавиатурното устройство. Единият начин е с макроси, другият е с атрибути на променливата/секцията...
|
| Нед Юли 27, 2014 9:44 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
Току що пробвах метода на батето и е пушка. Голямо благодаря от мен за идеята! Edit: побързах да се самозалъжа Пак гърми гадта... Ексепшъна е като за глешка при подравняването, а адресът на ексепшъна странно обаче е подравнен
_________________ 'просто' е технически синоним на 'красиво'
|
| Нед Юли 27, 2014 9:54 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Каква е тая тъпотия??
Добре де, нали Владо ти е дал атрибутите за подравняване и пакетиране? Тоя компилатор на Микрочип нали е с gcc ядро, значи ги подържа. И да не е, някъде там в документацията има как се да подравняваш данните по твой вкус, всички компилатори го имат, дали ще е __atribute или #pragma някаква....
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Нед Юли 27, 2014 12:46 pm |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
В крайна сметка се оправих. Проблемът се оказа не подравняването, а следния ред: където 'p' е от тип (unsigned char *) и сочи вътре в масива към данни от тип (long double). Така и не разбрах защо XC32 гърми на това, но когато промених прехвърлянето да е с memcpy() всичко си тръгна както си му е редът.
_________________ 'просто' е технически синоним на 'красиво'
|
| Пон Юли 28, 2014 2:33 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Каква е тая тъпотия??
Ами тука май също може да имаш ядове с подравняване.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Юли 28, 2014 8:37 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
Правилно. Важното е, че поне изкопах грешката защото вече бях побеснял (тъпи >8-битови архитектури...  )
_________________ 'просто' е технически синоним на 'красиво'
|
| Пон Юли 28, 2014 11:47 am |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: Каква е тая тъпотия??
Мен лично ме ужасява мисълта да се налага да "чета" код в, който се прави кастване от ( unsigned char* ) в ( long double* ) Нищо лично, аз съм човек със скромен програмистки опит. Но според мен проблема ти не е в архитектурата нито в компилатора, просто стила ти на писане е като за Matlab 
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Пон Юли 28, 2014 11:59 am |
|
 |
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 9:14 am Мнения: 5298
|
 Re: Каква е тая тъпотия??
Стилът на писане зависи от безброй фактори, един от които е естеството на проблема. Аз лично не бих скочил с двата крака в прибързани заключения... 
_________________ 'просто' е технически синоним на 'красиво'
|
| Пон Юли 28, 2014 3:55 pm |
|
|