реклама на сайте
подробности

 
 
> перезапись переменных dsPIC30F
pipka
сообщение Jul 21 2011, 06:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-07-07
Пользователь №: 29 465



Здравствуйте. Микроконтроллер принимает данные через UART в кольцевой буфер, буфер представляет собой массив из 128 значений. Проблема заключается в том, что иногда значения из приемного буфера присваются к совершенно другим уже инициализированнвм переменным, то есть происходит их перезапись. Программа разбита на несколько файлов, переменные глобальные. Компилятор MPLAB C30. Может кто сталкивался, помогите разобраться в чем дело.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
gena_p1
сообщение Jul 21 2011, 12:08
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-05-10
Пользователь №: 57 193



если играть в угадайку, то косяк в программе.
конец буфера не отловлен и продолжается запись в ОЗУ на переменные идущие следом.
попробуйте посмотреть при пошаговой трассировке состояние памяти.
Хотя, если переменные после буфера, то и так все понятно.
Go to the top of the page
 
+Quote Post
pipka
сообщение Jul 21 2011, 12:34
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-07-07
Пользователь №: 29 465



Поясните, если не сложно, что значит отловить конец буфера. У меня при приеме байта инкрементируется указатель на элемент массива, после превышения количества элементов массива, указатель обнуляется и запись начинается с нулевого элемента.

Сообщение отредактировал pipka - Jul 21 2011, 12:41
Go to the top of the page
 
+Quote Post
gena_p1
сообщение Jul 21 2011, 13:32
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 11-05-10
Пользователь №: 57 193



указатель на адрес в ОЗУ, я так понимаю, а не индекс элемента массива? тогда его не обнулять надо, а присваивать ему первоначальное значение, которое заранее запомнить еще до приема нулевого элемента.
Go to the top of the page
 
+Quote Post
pipka
сообщение Jul 22 2011, 04:41
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-07-07
Пользователь №: 29 465



У меня приемный буфер организован так:

CODE
receive_buffer[RX_byte_write_count++]=U1RXREG;
RX_byte_write_count&=Buf_Mask;


где Buf_Mask=128-1=127.

Go to the top of the page
 
+Quote Post
Danis
сообщение Jul 23 2011, 06:59
Сообщение #6


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Цитата(pipka @ Jul 21 2011, 10:41) *
Проблема заключается в том, что иногда значения из приемного буфера присваются к совершенно другим уже инициализированнвм переменным, то есть происходит их перезапись.


Привет, dsPIC30F тут совершенно не причем. Проблема в Вашем софте, скорее всего неправильно организованна кольцевая очередь. Тут нужно поститься в раздел программирование, будет больше просмотров и желающих помочь. Можете мне в личку написать, скину Вам рабочий код.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
pipka
сообщение Jul 25 2011, 04:50
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-07-07
Пользователь №: 29 465



Написал в личку.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016