|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 10:07 pm
|
Страница 1 от 1
|
[ 6 мнения ] |
|
| Автор |
Съобщение |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
 Проблем с инициализация
Заглавието не е точно  , но проблемьт изглежда приблизително така
main.c
array.h
резултатьт е, че масивьт ми е пьлен с неопределени стойности. Лошото е, че понякога стойностите са такива каквито трябва. Това е единственото място кьдето чета или пиша в масива.
В действителност операциите са малко повече, но всички са в func(), като не прехвьрлям максималната стойност на unsigned int. Накрая редуцирах всичко до обикновенно шифтване, сьщата история. Какво пропускам? Компилаторьт е КЕИЛ, а µC-а 88C166. Сигурно питам голяма глупост, ама ....
|
| Пет Мар 09, 2007 10:55 pm |
|
 |
|
Nikola Kirov
Ранг: Форумен бог
Регистриран на: Нед Окт 31, 2004 9:19 pm Мнения: 4464 Местоположение: Stara Zagora
|
Първо ми се набива на очи че си декларираш променлива и я инициализираш в h фаила. Това не е правилно.
Ако този h фаил го инклуднеш и някъде другаде по принцип компилатора трябва да даде грешка. Ако не даде резултатите може и да са като това което описваш.
трява да инициализираш в c. фаила а в h фаила да имаш
extern unsigned int array[]; ако искаш този масив да го ползваш и в някой друг c фаил в които си инклуднал h фаила.
|
| Съб Мар 10, 2007 12:01 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Никола благодаря за отговора! Забравих да пиша, че бях опитал да декларирам и едновременно с това да инициализирам най-горе в .c файла, още преди декларацията на всички функции.
После написах една функция modify(), която да го модифицира. Компилира се без проблеми обаче изглежда modify() не работи както трябва и func() дава глупости.
Нещата се оправят единствено когато декларирам и инициализирам масива вьтре в func() и си го модифицирам от там. Ще ровичкам отново в понеделник, изморен сьм и сигурно пропускам нещо.
|
| Съб Мар 10, 2007 2:41 am |
|
 |
|
nickich
Ранг: Почетен член
Регистриран на: Вто Ное 01, 2005 10:23 am Мнения: 704 Местоположение: Limerick, Ireland
|
Като гледам така 'х' е локална за func(), което означава, че не се ползва другаде и компилатора може да оптимизира func(), или най-вероятно да я махне. Всъщност, какво трябва да прави func() в последния пример? Може да видиш листинга на програмата, или да спреш на brakepoint преди всяка функция и да видиш дали масива в началото е инициализиран правилно, или след това се омазва. Това не ми стана много ясно...
_________________ "640 К са достатъчни на всеки за всичко." Бил Гейтс
|
| Съб Мар 10, 2007 11:00 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
@nickich
func() в действителност е модификация на binary search с която тьрся в lookup таблица, каква темп. сьм измерил (pt100). Това x сьм го писал за да изглежда по-пригледно.
Проблемьт дойде от там, че използвам делител на напрежение вместо източник на конст. ток (такова ми е заданиетоm знам че е сьпроводено и 1000 източника на грешки) и като начинаещ си сметнах lookup таблицата за даденото ми сьпротивление от 220ома. Което разбира се се оказа в долната граница на толерантността си и и се наложи да преизчисля lookup таблицата за 218ома. Обаче имах само крос компилатора на Кеил на разположение (и машината е под Windows) и викам за начало ще вкарам една modify() функция, която преизчислява наново lookup таблицата в µC-a.
В интерес на истината lookup таблицата си я преизчислявам в кьщи на PC-то и modify() в действителност не се мандахерца в сорса за µC-а, но да се появи тази грешка и искам да разбера защо. И за да ми е максимално гадно кода си стана големичьк и не мога да ползвам дебьгера (Кеила е демо), та опитвам да дебьгвам с LCD-то, мька. Ще огледам пак понеделник да не би да сьм пропуснал нещо.
|
| Съб Мар 10, 2007 11:48 am |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Така мисля, че открих корените на проблема. Инициализацията на глобалните променливи е била забранена в startup файла, което в комбинация с изключено нулиране на RAM сектора ми е бьркало нещата. Тук е описано всичко по-подробно, ако представлява интерес за някой.
http://www.mcu-bg.com/mcu_site/viewtopi ... 7313#47313
|
| Сря Мар 21, 2007 11:54 pm |
|
|
|
Страница 1 от 1
|
[ 6 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|