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

 
 
> 1 апреля толи от keil толи от F042
RadiatoR
сообщение Apr 1 2016, 08:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Имеется F042k6u6
К нему подключеан аналоговый мультиплексор HEF4051B. Он мультиплексирует аналоговые сигналы с 6 (на схеме есть 7 - не юзаю) ножек на 1 в ADC контроллера. (Схема старая, поэтому грязь и ужас, не обращайте внимания)


Частота смены 333Hz, что более чем норм.
Код следующий:
Опрос ADC 333Hz просто в таймере:
Код
if(ADC1->ISR&ADC_ISR_ADRDY)ADC_start;


Вот обработчик прерывания:
Код
void ADC1_IRQHandler(void)
   {
       static byte ADCChan=0;
       //static byte last;
       if(ADC1->ISR&ADC_ISR_EOC)
       {
           ADCVal[ADCChan++]=ADC1->DR;
           if(ADCChan>5)
           {
               ADCChan=0;
               ADC_ready=true;
           }
           GPIOB->BRR=7;
           GPIOB->BSRR=ADCChan;
       }
   }


Вот осциллограмма:


Зеленый - аналоговый сигнал
Желтый - бит 1
Голубой - бит 2
Фиолетовый - бит 3

Смотрите - я при каждом прерырвании инкрементирую канал и выставляю его, но у меня выставляются следующие значения канала:
0
1
0
1
2
3
4
5
Почему я так и не смог понять. Проблема решилась очень странно - я добавил в функцию переменную last (я хотел через нее было тестить, но обнаружил что с ней работает норм). В итоге если она закомменчена - не работает, а если присутствует, то работает. Хотя сам компилятор ее оптимизирует и хекс остается одинаковым - проверен побайтно через STlink utility.

Как это понимать? Первоапрельский розыгрыш?

ps. причем last должен обязательно быть static, иначе не работает

Сообщение отредактировал ЯadiatoR - Apr 1 2016, 08:33
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
Obam
сообщение Apr 1 2016, 08:20
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



"налоговый мультиплексор" да 1 апр. действительно.
Требую налоговых послаблений (:


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Apr 1 2016, 08:22
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



действительно :D
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 1 2016, 08:35
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



А всякий раз по входу в ADC1_IRQHandler
static byte ADCChan=0; - не смущает?


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 1 2016, 08:44
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Obam @ Apr 1 2016, 11:35) *
А всякий раз по входу в ADC1_IRQHandler
static byte ADCChan=0; - не смущает?

А вас смущает? Если да, советую почитать учебник.
Кстати, "byte" вместо "int" на АРМе - это мощно. Наводит на мысль о тяжёлом наследии 8051 biggrin.gif
Go to the top of the page
 
+Quote Post
Obam
сообщение Apr 1 2016, 08:52
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(scifi @ Apr 1 2016, 12:44) *
А вас смущает?


Ох стыд-то какой ):


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Apr 1 2016, 09:01
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Цитата(scifi @ Apr 1 2016, 11:44) *
А вас смущает? Если да, советую почитать учебник.
Кстати, "byte" вместо "int" на АРМе - это мощно. Наводит на мысль о тяжёлом наследии 8051 biggrin.gif


Ну я большую часть практики писал под AVR, да и сейчас 32кб арм не такая роскошь, хотя занято получается около 12 кб. Но все равно я остаюсь экономным - по крайней мере это не мешает.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 1 2016, 09:13
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ЯadiatoR @ Apr 1 2016, 11:13) *
Как это понимать?

Посмотрите map файл, какая переменная выше ADCChan.
Скорее всего там какой-нить массив, и вы вышли за его границы.
Использовать byte вместо int на F042 себе дороже, ибо доступ к невыровненным данным чреват ловлей исключения.
А может компилятор собирает невыровненный int где-то...
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 1 2016, 09:18
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ЯadiatoR @ Apr 1 2016, 12:01) *
Но все равно я остаюсь экономным - по крайней мере это не мешает.

Какая же это экономия? "byte" - 4 буквы, а "int" - три biggrin.gif
Бросайте эту пустую экономию. Экономить надо начинать, когда байты кончились. Это не значит, что нужно взять и выделить себе массив на 100500 байт просто для прикола. Но вот так крохоборствовать по поводу этих байтиков - себе дороже выйдет.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Apr 1 2016, 09:32
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Что-то идет непонятное

Код
ddiv_reciptbl      0x08003836   Data         128  ddiv.o(.constdata)
.constdata         0x080038b6   Section       64  fdiv.o(.constdata)
fdiv_tab           0x080038b6   Data          64  fdiv.o(.constdata)
.data              0x20000000   Section        9  adc.o(.data)
ADCChan            0x20000007   Data           1  adc.o(.data)
last               0x20000008   Data           1  adc.o(.data)
.data              0x2000000c   Section       18  ans-3.o(.data)


Как раз получается последняя идет на 9 байт

Попробовал изменить byte на uint и закомментил ласт - вообще после первого цикла перестает работать.
Вернулся на byte и last
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 1 2016, 09:52
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ЯadiatoR @ Apr 1 2016, 12:32) *
Что-то идет непонятное
Вернулся на byte и last

А что лежит от 0x2000_0000 до 0x2000_0006?
По какому адресу располагается ADCVal, каков его тип и размер.
Заменить ADCVal[ADCChan++] на
ADCVal[ADCChan] =
+
ADCChan++;
пробовали?
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 1 2016, 10:07
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(ЯadiatoR @ Apr 1 2016, 12:32) *
Попробовал изменить byte на uint и закомментил ласт - вообще после первого цикла перестает работать.
Вернулся на byte и last

Какие-то танцы с бубном. Внутрисхемного отладчика нет что ли?
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Apr 1 2016, 10:24
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



Цитата(adnega @ Apr 1 2016, 12:52) *
Заменить ADCVal[ADCChan++] на
ADCVal[ADCChan] =
+
ADCChan++;
пробовали?

Пробовал - нее помогало.

Цитата(scifi @ Apr 1 2016, 13:07) *
Какие-то танцы с бубном. Внутрисхемного отладчика нет что ли?

Конечно есть - толку было не много...

ps. Я не мог остановиться на мысли, что производители мк и кейла дураки, а я такой самый умный. И пошел копать в глубину проекта.
И в одном из исходников я обнаружил как думаете что? Верно - переход за индекс массива. Что-то становилось не так и все ломалось к чертям. Поправил это дело и все стало работать нормально.
Все таки не дураки там сидят, хотя помню копался с NSS у SPI на чипе - вот я задолбался, а оказалось он в еррата описан и на кристалле не работал...

Оффтпик:
как вставлять сразу несколько цитат?
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 1 2016, 11:20
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(ЯadiatoR @ Apr 1 2016, 13:24) *
И пошел копать в глубину проекта. И в одном из исходников я обнаружил как думаете что?

Прежде чем глубоко копать нужно посмотреть map-файл - площадь раскопок сократиться.
Go to the top of the page
 
+Quote Post
RadiatoR
сообщение Apr 1 2016, 11:25
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 270
Регистрация: 8-08-15
Из: Москва
Пользователь №: 87 901



так то да, но в mapах я не силен - да и я ничего особенного там не нашел
Go to the top of the page
 
+Quote Post

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

 


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


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