|
|
  |
eZ430-F2013, впечатления |
|
|
|
Dec 31 2009, 10:22
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
В Документе MSP430x2xx_Family_User's_Guide_(Rev._D)_slau144d.pdf на странице 6-2 в главе про работу с DMA (Direct Memory Access) - (подозреваю, что перевод "пропускная память директора" не совсем точен). Указано ясно - использование DMA контролёра, передающего данные из одного адреса в другой (типа почтальон), без вмешательства ЦПУ может передавать данные конверсии АЦП в оперативную память. (The direct memory access (DMA) controller transfers data from one address to another, without CPU intervention, across the entire address range. For example, the DMA controller can move data from the ADC12 conversion memory to RAM.) Отсюда вопрос - значит ли это, что если использовать DMA, то это позволить ужать код на ассемблере до заветных 1 кб, чтобы поместилось на флеш? Другими словами, при удобствах DMA не сильно ли он усложняет-расширяет код?
|
|
|
|
|
Jan 11 2010, 07:24
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
С прошедшими (наконец с облегчением-спасибо Господи, пережили!) праздниками поздравляю всех дорогих форумчан. Пользуясь знаменательной датой (11 января - день "спасибо") благодарю за помощь. Подозреваю, мои проблемы были с тем, что тип микроконтроллера, используемый мною - MSP430F2012. Взятый же из книга пример - "Под " ’149 device" имеется в виду тип микроконтроллера - MSP430F149." Переписал на ассемблере, вот что получилось: Код MOV "00110", ADC12CTL1 Цитата(rezident @ Dec 31 2009, 21:51)  А где вы увидели модуль DMA в MSP430F2013? В User's Guide описана вся имеющаяся в кристаллах данного семейства периферия. Но какая именно периферия имеется в данном конкретном кристалле нужно смотреть в его datasheet. Уважаемый Резидент, спасибо за участие, на странице 18 документа "SLAS491A -- August 2005 - Revised October 2005" приведено следующее - ADC10 (MSP430x20x2 only) The ADC10 module supports fast, 10-bit analog-to-digital conversions. The module implements a 10-bit SAR core, sample select control, reference generator and data transfer controller, or DTC, for automatic conversion result handling allowing ADC samples to be converted and stored without any CPU intervention. Implements - я понял как "выполнять, осуществлять, обеспечивать выполнение". That's why I hope to use DTC as trivial form of DMA.
|
|
|
|
|
Jan 11 2010, 17:20
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Извините за ошибочные дубликаты - глючила связь. Подскажите, пожалуйста, почему на следующие простые команды компилятор ругается вот так Error[446]: Number out of range. Valid range is -32768 (-0x8000) to 65535 (0xFFFF). C:\Documents and Settings\vlad\Мои документы\IAR Embedded Workbench\temper-prj\asm.s43 17 Ведь если перевести из двоичного вида в десятичный, получим 3338, что укладывается не только в диапазон -32768 до 65535, но и в диапазон (-8000 до FFFF в шестнадцатеричном представлении). Код #include "msp430x20x2.h" ; #define controlled include file
EDE ORG 01B0h MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer MOV.W #011001100111000,EDE ; Настройка первого управляющего АЦП MOV.W #101000100000010,EDE+1 ; Настройка второго управляющего АЦП MOV.W #011001100111000,EDE ; Разрешить и запустить преобразование ; (endless loop) END
|
|
|
|
|
Jan 11 2010, 20:13
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(VVlad @ Jan 11 2010, 12:24)  That's why I hope to use DTC as trivial form of DMA. Эта оговорка совершенно справедливая, DTC это не полноценный DMA. Цитата(VVlad @ Jan 11 2010, 22:20)  Подскажите, пожалуйста, почему на следующие простые команды компилятор ругается вот так Error[446]: Number out of range. Valid range is -32768 (-0x8000) to 65535 (0xFFFF). C:\Documents and Settings\vlad\Мои документы\IAR Embedded Workbench\temper-prj\asm.s43 17 Потому, что #011001100111000 это десятичное число, а не двоичная запись числа. Символ # в записи указывает на способ адресации аргумента - непосредственная адресация, а вовсе не на двоичную форму записи этого числа. Двоичные числа в ассемблере IAR начинаются с префикса b или заканчиваются суффиксом b. Смотрите EW430_AssemlerReference.pdf из комплекта документации IAR.
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 12 2010, 12:07
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Цитата(rezident @ Jan 11 2010, 23:13)  Эта оговорка совершенно справедливая, DTC это не полноценный DMA. Потому, что #011001100111000 это десятичное число, а не двоичная запись числа. Символ # в записи указывает на способ адресации аргумента - непосредственная адресация, а вовсе не на двоичную форму записи этого числа. Двоичные числа в ассемблере IAR начинаются с префикса b или заканчиваются суффиксом b. Смотрите EW430_AssemlerReference.pdf из комплекта документации IAR. Благодарю за снисходительность к моему дремучему невежеству и особое спасибо за точный исчерпывающий ответ. Обнаружил только что, есть файл msp430.h в папке X:\430\inc\, со ссылкой на файл msp430x20x2.h, где абсолютным адресам управляющих регистров присвоены псевдонимы Код #define ADC10DTC0_ (0x0048) /* ADC10 Data Transfer Control 0 */ DEFC( ADC10DTC0 , ADC10DTC0_) #define ADC10DTC1_ (0x0049) /* ADC10 Data Transfer Control 1 */ DEFC( ADC10DTC1 , ADC10DTC1_) Можно ли использовать их вместо абсолютных адресов, например, так Код MOV.W #WDTPW+WDTHOLD,&WDTCTL; Stop watchdog timer MOV.W #011001100111000b,ADC10DTC0_ ; Настройка первого управляющего АЦП MOV.W #101000100000010b,ADC10DTC1_; Настройка второго управляющего АЦП MOV.W #011001100111011b,ADC10DTC0_ ; Разрешить и запустить преобразование Простите за ещё один глупый вопрос, но что означает символ подчёркивания, обязателен ли он (в функции DEFC два аргумента - первый без подчеркивания, второй - с ним)?
|
|
|
|
|
Jan 12 2010, 19:57
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(VVlad @ Jan 12 2010, 17:07)  Можно ли использовать их вместо абсолютных адресов При подключении соответствующего хедера использовать можно, но не рекомендуется. TI настойчиво рекомендует везде использовать стандартные символьные обозначения битов и регистров. Именно те, которые во всей документации TI упоминаются. Эти стандартные обозначения как раз в хедерах msp430xXXX.h прописаны. Хедеры с именами io430xXXX.h это аналогичное изделие, но от IAR. В заголовках хедеров обычно указано, кто их автор. Откройте в любом текстовом редакторе и посмотрите. Цитата(VVlad @ Jan 12 2010, 17:07)  Простите за ещё один глупый вопрос, но что означает символ подчёркивания, обязателен ли он (в функции DEFC два аргумента - первый без подчеркивания, второй - с ним)? Подчеркивание введено для того, чтобы различать стандартные символьные обозначение регистров и их "подстановочные" имена, используемые в макросах IAR. Как я уже написал выше, использовать следует именно стандартные символьные имена, которые без подчеркиваний в конце или начале. Кстати, ваша запись некорректная. Вы использовали символьный способ адресации, вместо абсолютного. В результате константы в трех последних командах будут загружены совсем не по тому адресу, которому вы предполагаете. Читайте внимательно описание способов адресации операндов и их символьного обозначения в User's Guide. Вот тут на русском есть.
|
|
|
|
|
Jan 13 2010, 08:22
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Цитата(rezident @ Jan 12 2010, 22:57)  При подключении соответствующего хедера использовать можно, но не рекомендуется. TI настойчиво рекомендует везде использовать стандартные символьные обозначения битов и регистров. Именно те, которые во всей документации TI упоминаются. Эти стандартные обозначения как раз в хедерах msp430xXXX.h прописаны. Хедеры с именами io430xXXX.h это аналогичное изделие, но от IAR. В заголовках хедеров обычно указано, кто их автор. Откройте в любом текстовом редакторе и посмотрите. Подчеркивание введено для того, чтобы различать стандартные символьные обозначение регистров и их "подстановочные" имена, используемые в макросах IAR. Как я уже написал выше, использовать следует именно стандартные символьные имена, которые без подчеркиваний в конце или начале. Кстати, ваша запись некорректная. Вы использовали символьный способ адресации, вместо абсолютного. В результате константы в трех последних командах будут загружены совсем не по тому адресу, которому вы предполагаете. Читайте внимательно описание способов адресации операндов и их символьного обозначения в User's Guide. Вот тут на русском есть. В результате искренних и страстных попыток понять управление встроенным в MSP430F2012 АЦП (ADC10) сложилось впечатление, что не стоит выключать сторожевой таймер, настроить его на 100 мсек, загрузить контрольные регистры (250 мксек), запустить 16-кратную выборку (0.8 мсек), преобразование (100 мкс), посредством DTC заполнить память, выполнить усреднение (0.9 мсек), передать результат в порт вывода и уйти в спящий режим (на 97 мсек) до перезапуска от сторожевого таймера. Относительно хедер-файлов разобрался, символ подчёркивания как признак "макросной подстановочности" осознал, в любезно предоставленном Вами "ЮГ"-е есть фраза "В большинстве примеров показаны схожие режимы адресации для источника и получателя, но в команде возможны любые правильные комбинации способов адресации источника и получателя." после таблицы 3.3 перед замечанием о EDE и TONI. Значит ли это, что допустимо совместить в одной команде кода ассемблера прямой режим для первого операнда (вместо #011001100111000b возможно эквивалентное #3338h)-источника с абсолютным режимом (&01B0h) для второго операнда - получателя? Код EDE ORG 01B0h MOV.W #WDTPW+WDTHOLD,&WDTCTL; Stop watchdog timer MOV.W #3338h,&EDE ; Настройка первого управляющего АЦП Кстати по адресу http://focus.ti.com/mcu/docs/mcuprodcodeex...&tabId=1468мне посчастливилось скачать файловый архив из http://www.ti.com/lit/zip/slac080, где в файле msp430x20x2_adc10_01.asm загрузка контрольных регистров в АЦП выглядит просто сказочно: Код .cdecls C,LIST, "msp430x20x2.h"
;------------------------------------------------------------------------------ .text ; Progam Start ;------------------------------------------------------------------------------ RESET mov.w #0280h,SP ; Initialize stackpointer StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT SetupADC10 mov.w #ADC10SHT_2+ADC10ON+ADC10IE,&ADC10CTL0; 16x, enable int. Если концепция верна, то здесь первый операнд адресуется то ли прямым режимом (признак - есть символ решётки #), то ли символьным (есть псевдонимы типа ADC10SHT_2). Или от нас скрывают какоё-то восьмое чудо света-режим комбинированный прямо-символьный? Стыдно признаться, но не могу понять. Помогите пожалуйста разобраться.
|
|
|
|
|
Jan 14 2010, 09:28
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(VVlad @ Jan 13 2010, 13:22)  уйти в спящий режим (на 97 мсек) до перезапуска от сторожевого таймера. Зачем перезапуск-то нужен? Используйте WDT в режиме интервального таймера, который вызывает установку флага WDTIFG и прерывание с тем же периодом, а не полный рестарт программы. Прерывание "разбудит" ядро. А все ваши программные действия можно выполнить внутри обработчика прерывания, либо выполнить команду, выводящую ядро из спячки. Программа при этом должна быть зациклена в бесконечный цикл. Цитата(VVlad @ Jan 13 2010, 13:22)  Значит ли это, что допустимо совместить в одной команде кода ассемблера прямой режим для первого операнда (вместо #011001100111000b возможно эквивалентное #3338h)-источника с абсолютным режимом (&01B0h) для второго операнда - получателя? Да, допустимо. Цитата(VVlad @ Jan 13 2010, 13:22)  Если концепция верна, то здесь первый операнд адресуется то ли прямым режимом (признак - есть символ решётки #), то ли символьным (есть псевдонимы типа ADC10SHT_2). Или от нас скрывают какоё-то восьмое чудо света-режим комбинированный прямо-символьный? В вашем примере символьные обозначения битов, которые суммируются (+) в константу препроцессором. А константа в свою очередь адресуется непосредственным (#) образом, то бишь располагается в памяти непосредственно сразу вслед за кодом операнда.
|
|
|
|
|
Jan 14 2010, 12:58
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Резидент, Ваши ответы поразительным образом сочетают в себе глубокий профессионализм с доступностью изложения. Не устаю радоваться счастью общения с Вами.
|
|
|
|
|
Jan 14 2010, 15:43
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Если пишу не в тему, простите и не бейте больно, пожалуйста. Из файла slac080g взял за основу код msp430x20x2_adc10_08.s43 Код #include "msp430x20x2.h" ;------------------------------------------------------------------------------- RSEG CSTACK ; Определяем сегмент стека ;------------------------------------------------------------------------------- RSEG CODE ; Сборка во флеш-памяти ;------------------------------------------------------------------------------- RESET mov.w #SFE(CSTACK),SP ; Инициировать указатель стека StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Остановить сторожевой таймер SetupADC10 mov.w #CONSEQ_2+INCH_1,&ADC10CTL1; Режим разового повтора mov.w #SREF_1+ADC10SHT_2+MSC+REFON+ADC10ON+ADC10IE,&ADC10CTL0; mov.w #30,&TACCR0 ; Задержка для установления Ref bis.w #CCIE,&TACCTL0 ; Прерывание режима сравнения. mov.w #TACLR+MC_1+TASSEL_2,&TACTL; верхний режим, SMCLK bis.w #LPM0+GIE,SR ; Вход в LPM0 с прерываниями bic.w #CCIE,&TACCTL0 ; Отключить прерывание таймера dint ; Отключить прерывания mov.b #020h,&ADC10DTC1 ; 32 преобразования bis.b #02h,&ADC10AE0 ; опция выбора P1.1 для АЦП SetupP1 bis.b #001h,&P1DIR ; выход P1.0 в режим выводы ; Mainloop bic.w #ENC,&ADC10CTL0 ; Начало ОПЦ busy_test bit #BUSY,&ADC10CTL1 ; ядро ADC10 неактивно? jnz busy_test ; mov.w #0200h,&ADC10SA ; Запуск буфера данных bis.b #001h,&P1OUT ; P1.0 = 1 bis.w #ENC+ADC10SC,&ADC10CTL0; Запуск захвата bis.w #CPUOFF+GIE,SR ; LPM0, режим запуска по ADC10_ISR bic.b #001h,&P1OUT ; P1.0 = 0 jmp Mainloop ; Повтор ОПЦ ; ;------------------------------------------------------------------------------- TA0_ISR; ISR for TACCR0 ;------------------------------------------------------------------------------- clr.w &TACTL ; Очистка управ. регистров Timer_A bic.w #LPM0,0(SP) ; Выход из LPM0 по reti reti ; ;------------------------------------------------------------------------------- ADC10_ISR; Exit LPM0 on reti ;------------------------------------------------------------------------------- bic.w #CPUOFF,0(SP) ; Выход из LPM0 по reti reti ; ; ;------------------------------------------------------------------------------- COMMON INTVEC ; Векторы прерывания ;------------------------------------------------------------------------------- ORG ADC10_VECTOR ; Вектор ADC10 DW ADC10_ISR ORG TIMERA0_VECTOR ; Вектор Timer_A0 DW TA0_ISR ORG RESET_VECTOR ; POR, ext. Reset DW RESET END В ответ на попытку откомпилировать получил ошибку Код Error[e16]: Segment RESET (size: 0x2 align: 0x1) is too long for segment definition. At least 0x2 more bytes needed. The problem occurred while processing the segment placement command "-Z(CONST)RESET=FFFE-FFFF", where at the moment of placement the available memory ranges were "-none-" Reserved ranges relevant to this placement: ffe0-ffff INTVEC Пытаясь найти смысл в сегменте RESET, выяснил, что переменная CSTACK отсутствует как в хедерфайле "msp430x20x2.h", так и в хедерфайле "io430x20x2.h". Допустим, в этой строке она определяется и инициализируется, сколько же тогда под неё памяти отводится. В сообщении об ошибке (е16) говорится, что сегмент слишком велик. Может быть его уменьшить? Если да, то как это сделать? Подскажите, пожалуйста, где взять описание ошибок, чтобы не беспокоить по поводу каждой ошибки. Заранее спасибо.
|
|
|
|
|
Jan 14 2010, 16:39
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Сообщение модератора ON.Выделил сообщение из ветки FAQ. Не нужно извиняться. Следует сразу писать в свою или в отдельную ветку. Сообщение модератора OFF.Цитата(VVlad @ Jan 14 2010, 20:43)  Допустим, в этой строке она определяется и инициализируется, сколько же тогда под неё памяти отводится. Да хоть все ОЗУ под стек можете отвести. Стек растет сверху вниз (имеются ввиду адреса), а данные в ОЗУ принято располагать снизу и наращивать вверх. Если расход стека большой или данных много, то стек с данными могут где-то пересечься. Этого нужно избегать, просчитав заранее расход стека для самого неблагоприятного стечения обстоятельств (вложенные прерывания + переменные на стеке). Хотя надо отметить, что "наползание" стека на область данных это один из самых гнусных багов (сложных для диагностики и вылавливания его). Цитата(VVlad @ Jan 14 2010, 20:43)  В сообщении об ошибке (е16) говорится, что сегмент слишком велик. Может быть его уменьшить? Если да, то как это сделать? Сегментацию программы измените. Определите явно ее начало в памяти. Например, так Код ;------------------------------------------------------------------------------- ORG 0FC00h ; Progam Start (1K Flash device) ;------------------------------------------------------------------------------- вместо Код ;------------------------------------------------------------------------------- RSEG CODE ; Сборка во флеш-памяти ;------------------------------------------------------------------------------- Цитата(VVlad @ Jan 14 2010, 20:43)  Подскажите, пожалуйста, где взять описание ошибок, чтобы не беспокоить по поводу каждой ошибки. В документации/руководстве вашего компилятора. Кроме того, в IAR диагностические сообщения и без этого довольно понятны сами по себе.
|
|
|
|
|
Jan 15 2010, 09:21
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
В ответ на Код #include "msp430x20x2.h" ;------------------------------------------------------------------------------- RSEG CSTACK ; Определяем сегмент стека ;------------------------------------------------------------------------------- ORG 0FC00h ; Начало программного кода (1K Flash device) ;------------------------------------------------------------------------------- RESET mov.w #SFE(CSTACK),SP ; Инициировать указатель стека StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Остановить сторожевой таймер нечто другое получено - Код Linking Error[e16]: Segment CSTACK (size: 0xfcac align: 0x1) is too long for segment definition. At least 0xfc2c more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", where at the moment of placement the available memory ranges were "CODE:200-27f" Reserved ranges relevant to this placement: 200-27f CSTACK Error while running Linker То есть ошибка та же, но вместо размера сегмента под CSTACK в 0х2 теперь 0хfc2c, требовать тоже стал больше - 0х8еса. Доступная память под стек стала 7f? (200-27f) После прочтения http://electronix.ru/forum/index.php?showt...st&p=591968захотел проверить, что написано в файле lnk4302012.lnx, и там то же самое - Код // --------------------------------------------------------- // Read-write memory. // ---------------------------------------------------------
-Z(DATA)DATA16_I,DATA16_Z,DATA16_N,DATA16_HEAP+_DATA16_HEAP_SIZE=0200-027F -Z(DATA)CSTACK+_STACK_SIZE#
// -------------------------------------------------------- А также ниже Код // --------------------------------------------------------- // Code // ---------------------------------------------------------
-Z(CODE)CSTART,ISR_CODE=F800-FFDF -P(CODE)CODE=F800-FFDF Правильно ли я понял, что когда линкер доходит до строки -Z(DATA)CSTACK+_STACK_SIZE#, ему неоткуда взять значение STACK_SIZE#, и поэтому fcac-fc2c=80 байтов перекрываются с сегментом CODE? В руководстве по Компилятору "MSP430 IAR C/C++ Compiler Referense Guide" на странице 31 (Placing code and Data) в главе "Segments and Memory" про стек не сказано ничего вплоть до стр.37-38. Там ясно сказано, что CSTACK - служебное зарезервированное слово для названия сегмента данных для поддержания стека. И системный код инициализирует указатель стека в конец сегмента стека. Как сказано ниже, выбрав Project>Options>General> Options>Stack/Heap/Overrhide Defaults/Stack 50 заменил на 20, результат не вдохновил - Код Linking Error[e16]: Segment CSTACK (size: 0xfc8e align: 0x1) is too long for segment definition. At least 0xfc0e more bytes needed. The problem occurred while processing the segment placement command "-Z(DATA)CSTACK+_STACK_SIZE#", where at the moment of placement the available memory ranges were "CODE:200-27f" Reserved ranges relevant to this placement: 200-27f CSTACK Error while running Linker Единственное отличие - fc8e-fc0e=снова 80. Первый недоуменный вопрос - почему разность не изменилась с 50 до 20, а осталась 80, как и раньше? Второй загадочный артефакт - указанная для командной строки строка -D_CSTACK_SIZE=size отсутствует в файле lnk4302012.lnx (закоментарена), как же линкер опять узнаёт размер стека как 80? Откуда?
|
|
|
|
|
Jan 15 2010, 23:50
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Понимаете ли, VVlad, языки нас объединяют и разъединяют одновременно. Большинство недоразумений возникают от недопонимания или незнания языка собеседника. Языки программирования не лишены этих человеческих недостатков. Оно и понятно, т.к. они придуманы людьми же для того, чтобы люди могли "объяснить" на понятном им языке, что же они хотят от программы? В свою очередь программа-компилятор переводит человеческие "хотелки" в вид, понятный уже исполняющему инструкции ядру МК. Если вы не можете толком объяснить компилятору чего же вы хотите, то может стоит его язык получше изучить? Вот вы пишете Цитата(VVlad @ Jan 15 2010, 14:21)  В руководстве по Компилятору "MSP430 IAR C/C++ Compiler Referense Guide" на странице 31 (Placing code and Data) в главе "Segments and Memory" про стек не сказано ничего вплоть до стр.37-38. но пардоньте! причем тут руководство по языку Си, если вы пишете на языке Ассемблера?  Вы уж либо читайте руководство MSP430 IAR Assembler Reference Guide, либо пишите программу на (как я понял) более знакомом вам языке Си. Ваш код программы из сообщения #28 будет нормально компилироваться (о нормальной работе потом поговорим  ), если в нее внести небольшие изменения, указав явно адреса, с которыми у вас возникают вопросы. #include "msp430x20x2.h" Код #include "msp430x20x2.h" ;------------------------------------------------------------------------------- ORG 0FC00h ; Укажем явно начало сегмента ;------------------------------------------------------------------------------- RESET mov.w #0280h,SP ; Инициировать указатель стека явным значением
|
|
|
|
|
Jan 17 2010, 17:33
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Спасибо за дружескую поддержку, Резидент! По Вашему совету указал адреса ЯВНО, ошибка [e16] не пропала. То же ругань на сегмент RESET, от безысходности отметил на вкладке General Options галочку напротив Assembler Project Only. И о чудо - вместо ошибки - только предупреждение - Код Building configuration: interrupt0 - Debug Updating build tree... 1 file(s) deleted. Updating build tree... msp430F2012_adc10.s43 Linking Warning[w29]: Parts of segment CSTACK are initialized (as in module msp430F2012_adc10), even though it is of type DATA (and thus not promable) Total number of errors: 0 Total number of warnings: 1 Поэтому удалось запустить процесс отладки и посмотреть содержимое регистров. Верно ли, что сегмент CSTACK должен быть целиком в области данных типа DATA? Смущает немного, что после выполнения команды RESET mov.w #0280h,SP ; Инициировать указатель стека явным значением в регистре SP лежит число 0x0000 (View->Register) Режим отладки Options>Debugger>Setup>Driver>Simulator (Симулятор).
Сообщение отредактировал VVlad - Jan 17 2010, 17:45
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|