Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопросы по использованию макросов в IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
jorikdima
Испоьзую IAR Kickstart. Задача следующая. На контроллере есть АЦП. Соответственно на него надо подавать аналоговый сигнал a14.gif , но источника этого сигнала нет. Поэтому с помощью макросов захотелось сэмулировать работу АЦП следующим образом:
заранее в файл например из матлаба записывает в двоичном виде оцифрованный сигнал, который хотели бы подать на АЦП. В ИАРе в проге делаем обработчик прерывания для АЦП, а само прерывание инициируется тайером А с частотой 512 раз в секунду. По идее надо в обработчике сделать что то типа
Код
Datain = ADC12MEM0

но так как сигнал то не подается поэтому ADC12MEM0 пустует. Поэтому ставим брейкпоинт, в котором выполняется макрос LoadData(). В этом макросе переменной Datain присваивается значение как бы заране мной оцифрованное smile.gif . Значение эт берется из файла, последовательно байт за байтом (Естественно файл заранее открывается ) с помощью макрофункции __readFileByte. В справке написано что возвращает эта функция считанный байт в формате uchar, а если конец файла или ошибка, то -1. Так вот, сам файл, который я заранее создал и заполнил с помощью матлаба соделжит порядка 800 байт и если считывать тем же матлабом то все они и считываются. Однако если читать файл с помощью указанной макрофункции, то считывается только 43 байта. А при считывании следующего байта функция возвращает -1.
Почему?

И еще 2 вопроса. Что делает функция __readFile()? Ест ли возможность использовать массивы в макросах. ТО есть считать сразу весь файл в массив а потом с этим массивом работать?

Спасибо.
dxp
Цитата(jorikdima @ Aug 30 2006, 18:44) *
Испоьзую IAR Kickstart. Задача следующая. На контроллере есть АЦП. Соответственно на него надо подавать аналоговый сигнал a14.gif , но источника этого сигнала нет. Поэтому с помощью макросов захотелось сэмулировать работу АЦП следующим образом:
заранее в файл например из матлаба записывает в двоичном виде оцифрованный сигнал, который хотели бы подать на АЦП. В ИАРе в проге делаем обработчик прерывания для АЦП, а само прерывание инициируется тайером А с частотой 512 раз в секунду. По идее надо в обработчике сделать что то типа
Код
Datain = ADC12MEM0

но так как сигнал то не подается поэтому ADC12MEM0 пустует. Поэтому ставим брейкпоинт, в котором выполняется макрос LoadData(). В этом макросе переменной Datain присваивается значение как бы заране мной оцифрованное smile.gif . Значение эт берется из файла, последовательно байт за байтом (Естественно файл заранее открывается ) с помощью макрофункции __readFileByte. В справке написано что возвращает эта функция считанный байт в формате uchar, а если конец файла или ошибка, то -1. Так вот, сам файл, который я заранее создал и заполнил с помощью матлаба соделжит порядка 800 байт и если считывать тем же матлабом то все они и считываются. Однако если читать файл с помощью указанной макрофункции, то считывается только 43 байта. А при считывании следующего байта функция возвращает -1.
Почему?

И еще 2 вопроса. Что делает функция __readFile()? Ест ли возможность использовать массивы в макросах. ТО есть считать сразу весь файл в массив а потом с этим массивом работать?

Вопрос уже освещался, воспользуйтесь поиском. Например, можно посмотреть тут: http://electronix.ru/forum/index.php?s=&am...ost&p=83532. Там рассмаривается прием пакета данных по UART'у, но, думаю, Вы легко сможете обобщить это на случай АЦП. smile.gif
jorikdima
Я бы посмотрел поиском да он не работает. У меня по крайней мере на Гугл выбрасывает.
То что Вы порекомендовали я знаю и понимаю, макрос работает и работает как надо. А вот почему считывается только 43 байта???
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.