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

 
 
> СС430F5137 с нуля на asm, нужна помощь
vazz
сообщение Feb 23 2013, 14:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Приобрел EM430F5137RF900 и MSP-FET430UIF, до приобретения особо не заморачивался с подготовкой "рабочего пространства" под новый проект, вроде бы камни не особенно новые, часто встречал различную информацию о них и не думал, что доставабельностью нужной для начала разработки инфы возникнут проблемы. Пол дня поискал в сети примеры заголовочных файлов под этот камень, примеры инициализации периферии, увы - результат 0. Это такой секрет? Такие данные достаются потом и кровью? Раньше работал с AVR (да и продолжаю время от времени), никаких таких проблем не помню, все было как-то проще достать и среда разработки нормальная (и бесплатная). Бог с ней со средой, поставил IAR KS на 4кБ кода (мне для попробовать). С самим ассемблером MSP и системой команд ознакомился поверхностно, страха не вызвал, вроде бы все просто (по крайней мере помигать светодиодом для начала - понятно как, а особенности и "камни" по ходу дела разберу). Стандартный заголовочный файл, который есть в папке иара "\inc" при пустом проекте вызывает негодование у компилятора IAR (дублирование лэйблов в объявлении регистров DMA). Попытался найти нормальный заголовочный файл в сети - нашел лишь такой же, "замазал" все места вызывающие негатив комментариями, чтобы не было ошибок. Далее попытался найти файл, который инициализировал бы мне всю периферию - тут все и загнулось. Я понимаю, что скорее всего при запуске МК все отключает сам и морганию светодиодом врядли что-то помешает, но хотелось бы иметь заготовку с полной инициализацией всех узлов МК ну и ессно полную таблицу векторов прерываний воткнуть в начало. Это добавляет уверенности в дальнейшем освоении камня. В отладчике иара тож пока особо не разобрался, если честно с первого раза иар вроде показался "классическим" средством разработки с простым и понятным интерфейсом, как начал лезть глубже - начало казаться, что первое впечатление обманчиво, чувство "чего-то не хватает" не покидает - ну к примеру как мне для отладчика задать тип МК, частоту кварца (чтоб время выполения отслеживать), также не нашел средства для заливки прошивки в МК (нужно отдельным ПО для этого ввоспользоваться чтоли?!). Прошу извинить за смешивание всего в кучу - помогите найти (или разобраться) с заголовочный файл для ассемблера под этот МК, файл инициализации всех устройств на борту, ну и вектора прерываний до кучи. На Си для МК не программирую и не особо горю желанием.


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
5 страниц V  « < 2 3 4 5 >  
Start new topic
Ответов (45 - 59)
d7d1cd
сообщение Jan 4 2014, 18:04
Сообщение #46


Местный
***

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



Цитата(SM @ Jan 4 2014, 22:00) *
Какая же это ошибка. Доступ к любому отдельному байту слова не ошибка, а фича sm.gif

То есть, получается так, что я задумывал использовать my_data как хранилище слова (о чем ясно указал - DS16), однако при написании кода я ошибся и обратился к этому слову как к байту. Моя программа в этом случае будет работать не правильно, а компилятор все видит и молчит? Тут все ложится на программиста? Нет средств для контроля?
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 4 2014, 18:15
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(d7d1cd @ Jan 4 2014, 22:04) *
однако при написании кода я ошибся и обратился к этому слову как к байту.


При написании на ассемблере программисты специально обращаются к байтам слов, чтобы обратиться отдельно либо к младшему, либо к старшему байту, не трогая другой байт, и таким способом экономят что-либо, размер кода например, или время исполнения. А также из таких же соображений обращаются словами сразу к двум специально рядом расположенным байтовым переменным по четному адресу. Ассемблерному программисту не положено по статусу такое делать по ошибке....

Цитата(d7d1cd @ Jan 4 2014, 22:04) *
Нет средств для контроля?

Есть конечно. Сделать эту часть кода на языке высокого уровня, в котором контроль типов более конкретный.


PS
Смысл в указании DS8/16/32 - чтобы линкер расположил переменную по адресу с корректным выравниваением, чтобы, например, слово, не попало на нечетный адрес. И больше ни для чего
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 4 2014, 18:59
Сообщение #48


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



А у меня еще один интересный вопрос: можно ли как-то программно прочитать серийный номер МК? Не DeviceID (типа 0x5137 для CC430F5137), а натуральный физический серийник

Сообщение отредактировал vazz - Jan 4 2014, 19:00


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 4 2014, 19:07
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



А вот это ищите в даташите. В некоторых MSP430 есть TLV (Device Descriptor) Structures - там поля lot/wafer ID, wafer X position, wafer Y position, test results - вот их можно с натягом считать неким unique ID.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jan 5 2014, 11:58
Сообщение #50


Местный
***

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



Спасибо за помощь. Но все таки есть метод, позволяющий в какой-то мере отслеживать ошибки, связанные с неправильным обращением к создаваемым переменным. И это касается не только размера этой переменной. Это еще чтение и запись. Для этого надо использовать директивы SFRB, SFRW и SFRTYPE. Есть еще SFRL, но почему то эта директива не работает. Наверное она работает с 32-х разрядными микроконтроллерами... Кому надо (новичкам в программировании на ассемблере) привожу пример:
Код
SFRB    AAA = 0x0201                  ; Переменная ААА размером 1 байт по адресу 0х0201
SFRW    BBB = 0x0202                  ; Переменная ВВВ размером 2 байта по адресу 0х0202
SFRTYPE CCC WORD, READ, WRITE = 0x0208; Переменная ССС размером 2 байта (WORD), с возможностью
                                      ; чтения (READ) и записи (WRITE) по адресу 0х0208

main2:  
        MOV     #10, AAA              ; Компилятор ругается (что и требовалось): Accessing SFR using incorrect size
        MOV.B   #10, AAA              ; Теперь все хорошо :)
        
        MOV.B   AAA, BBB              ; Здесь недостаток использования SFR, ведь байт можно переслать в слово, однако ругань
        MOV     #BBB, CCC             ; Перемещение в ССС адреса BBB (0x0202)
        MOV     BBB(R12), CCC         ; Использование ВВВ как массива (R12 - индекс массива)
        MOV     #12, &BBB+2           ; Занесение числа 12 во 2 элемент массива. Здесь компилотор предупреждает: Suspicious sfr expression
                                      ; Нужно обратить внимание, что здесь обязательно
                                      ; использование абсолютного режима адресации. Использование относительного режима
                                      ; адресации приводит к неправильному выполнению кода:
        MOV     #12, BBB+2            ; Помещаем число 12 во 2 элемент массива, однако число 12 попадает по адресу 0х1304, то
                                      ; есть на 0х1100 дальше. Почему так, не знаю...

Был тут еще вопрос по размеру кода при программировании на ассемблере в версии IAR с ограничением на размер программы. Я использовал готовую прошивку (размером больше 4-х кбайт) и попробовал запустить ее на отладку. Увы, IAR мне сказал, что есть ограничение на размер и идите лесом...

Сообщение отредактировал d7d1cd - Jan 5 2014, 13:32
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 5 2014, 12:12
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(d7d1cd @ Jan 5 2014, 15:58) *
Увы, IAR мне сказал, что есть ограничение на размер и идите лесом...

Это верно, ограничение на размер у линкера (xlink), и ему пофигу, на чем исходники был написан и в каких комбинациях.

А вот SFRx - они не для переменных придуманы. Это аббревиатура от Special Function Register - для описания регистров, к которым по железным причинам недопустимы какие-то виды операций с какими-то размерами данных. Хотя, конечно, как костыль использовать можно, особенно если размещение переменных по адресам памяти охота вручную делать.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jan 5 2014, 13:08
Сообщение #52


Местный
***

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



Цитата(SM @ Jan 5 2014, 16:12) *
...особенно если размещение переменных по адресам памяти охота вручную делать.

Бывают случаи, что не просто охота, а надо! wink.gif

Я тут добавил кое-что...

Сообщение отредактировал d7d1cd - Jan 5 2014, 13:33
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 5 2014, 13:17
Сообщение #53


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(d7d1cd @ Jan 5 2014, 15:58) *
Был тут еще вопрос по размеру кода при программировании на ассемблере в версии IAR с ограничением на размер программы. Я использовал готовую прошивку (размером больше 4-х кбайт) и попробовал запустить ее на отладку. Увы, IAR мне сказал, что есть ограничение на размер и идите лесом...


В моей нынешней программе около 1кБ кода, для эксперимента еще 4096 байт тупо замостил байтами директивой DB, ничего не ругается, при запуске отладки смотрю содержание FLASH - все вроде ок. Я не могу наверняка сказать, что не использую линкер (потому как не знаю когда он там нужен, вернее догадываюсь, но проверять чо-то не хочется), но походу если не использовать его, то можно и больше 4кБ компилировать. Так? Или я чего-то недопонял опять? sm.gif Или директива DB для читоты эксперимента не катит, нужно именно командами замостить типа NOP?

Сообщение отредактировал vazz - Jan 5 2014, 13:19


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 5 2014, 13:20
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(d7d1cd @ Jan 5 2014, 17:08) *
Бывают случаи, что не просто охота, а надо! wink.gif


Честно говоря, именно в контексте MSP430, у которого нет внешней шины, куда может быть что-то снаружи подключено по фиксированным адресам, и в котором нет DMA доступа для кого-то, расположенного снаружи, не верится, что это бывает надо. Все красиво решается средствами ассемблера - RSEG, ASEG, COMMON, и получается при этом максимально перемещаемым.

Цитата(vazz @ Jan 5 2014, 17:17) *
Или директива DB для читоты эксперимента не катит, нужно именно командами замостить типа NOP?


да-да. там размер кода ограничен, а не данных. И Вы не можете не использовать линкер. Без него не получите программу, которую можно загрузить в процессор, в том числе и в отладчике, так как именно линкер генерирует на выходе загружаемый исполняемый модуль из "промежуточных" объектных модулей, или одного модуля, полученных в результате работы транслятора ассемблера.
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 5 2014, 13:51
Сообщение #55


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(SM @ Jan 5 2014, 17:20) *
да-да. там размер кода ограничен, а не данных.


Замостил NOP (эквивалент 0x4303, смотрю через отладчик), начиная от 0xEF3C до 0xFF3C (4096 байт), плюс как и говорил около 1кБ своего кода. Также все ок. Э... хм... я что-то не так делаю? Или всеже PUBLIC/EXTERN в данном случае помогают линкеру понять сколько программного кода написано? Или может фирменный FET как-то влияет? Я уже начал "привыкать" к иару, а пиратить ничего не хочется. Варианты подскажите как еще его проверить на ограничение?

У меня вот такие сообщения пишет (после чего успешно запускается отладчик):

Цитата
Building configuration: CC430F5137-E - Debug
Updating build tree...
Linking

Total number of errors: 0
Total number of warnings: 0


Может у кого после слова Linking что-то пишется вообще? Я имею в виду даже при компиляции программы размером менее 4кБ.

Сообщение отредактировал vazz - Jan 5 2014, 13:51


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 5 2014, 13:54
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(vazz @ Jan 5 2014, 17:40) *
Замостил NOP (эквивалент 0x4303, смотрю через отладчик),

Ну, возможно, у Вас 8 кбайт ограничение (такое тоже бывает для каких-то семейств), или действительно, вообще при работе с FET ограничений нету. Линкеру никаких не надо дополнительных директив, чтобы знать размер кода - он тупо суммирует размеры всех сегментов, в которых код.

Цитата(vazz @ Jan 5 2014, 17:40) *
после слова Linking

И Вы до сих пор утверждаете, что не пользуетесь линкером? :D
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 5 2014, 14:16
Сообщение #57


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Цитата(SM @ Jan 5 2014, 17:54) *
И Вы до сих пор утверждаете, что не пользуетесь линкером? :D


Я не могу наверняка сказать, что не использую линкер )) харэ меня пинать этим линкером, ну не понимаю я его прибамбасов (скорее не хочу понимать), мне и без этого нормально живется))) память размечаю в ручную, всегда знаю по какому адресу находятся наиболее важные участки кода, будете смеяться - я в тех.задание на девайс эту карту разметки памяти (и ПЗУ и ОЗУ) тоже включаю и расписываю где что и зачем, не считая комментариев в самой программе.

А поповоду 8кБ - проверю и сей момент сейчас. Замощу JMP $ 24кБ, они у меня все равно пустуют, потому как ПО пишу, исходя не из богаства 5137, а из будущей 5133, она вроде подешевле.


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post
d7d1cd
сообщение Jan 5 2014, 14:24
Сообщение #58


Местный
***

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



Смотрите как я получил ограничение. Я создал шаблон проекта на ASM. В качестве отладчика у меня симулятор. Ставлю режим Release, делаю Project - Rebuild All. После этого иду в папку проекта и ищу там скомпилированный файл .a43 (это файл в формате intel hex). Вместо этого файла вставляю другой файл с таким же именем, который содержит скомпилированную большую программу. В проекте делаю Project - Download and Debug и получаю от системы сюрприз:


Кроме того потом еще вижу в Debug Log:
Цитата
Sun Jan 05, 2014 18:15:37: Using license: Standalone license - IAR Embedded Workbench for Texas Instruments MSP430, 4K KickStart Edition 5.60
Sun Jan 05, 2014 18:16:32: User error: Your application is too large. This version of IAR Embedded Workbench has a code limitation of 4096 bytes.


Однако дальше становится еще интереснее. После всех выше описанных действий я делаю Project - Rebuild All и Project - Download and Debug. Все загружается на отладку, однако в окне кода я вижу, что загрузился не только скомпилированный код, но и тот, который был в большом файле. Однако если закрыть симулятор и снова запустить на отладку, то код из большого файла пропадает. Вот так.
Go to the top of the page
 
+Quote Post
SM
сообщение Jan 5 2014, 14:30
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Это они что-то поднамутили более свежего... Раньше оно еще на этапе компиляции ругалось, что не слинкую Вам ничего, так как кода много. А теперь, смотрю, симулятор ругается... Да и пусть ругается, кому он нужен то, если вся отладка всегда "вживую" на чипе.
Go to the top of the page
 
+Quote Post
vazz
сообщение Jan 5 2014, 14:32
Сообщение #60


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 21-01-10
Пользователь №: 54 971



Замостил связкой:

Код
JMP   $
NOP


Пространство с 0x8000 до 0xDFFF (24'576 Байт). Ничего не ругается.


--------------------
Не так страшна автоматизация, как её малюют.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 4th August 2025 - 22:51
Рейтинг@Mail.ru


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