Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программирование msp430 на C
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Isaev_ivan
Добрый день! У меня совсем небольшой вопрос. Хочу перейти с ассемблера на язык С. И интересует, как можно ниже представленный код интерпретировать на языке С:
Код
#include "msp430F1232.h"

    RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1
......

Т.е выделение какого-то сегмента памяти.
Сергей Борщ
Не надо пытаться писать на Си на Ассемблере.

Надо решать задачу используя те возможности, которые для этого предоставляет Си.
k155la3
Цитата(Сергей Борщ @ Oct 28 2016, 11:18) *
Не надо пытаться писать на Си на Ассемблере.

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


Если ассемблер дорог Вам "по любви к искуству".

С есть компилятор, который берет на себя распределение памяти вместо Вас.
Он это сделает быстрее-лучше(как правило) чем человек.

Предлагаю Вам "вывернуть" Ваш вопрос наизнанку.
Пишите на С простую функцию. В окне дизассемблера видите все "внутренности" ассемблерного кода.
Берете сгенерированый С листинг (на ASM), смотрите, если надо - "выдергиваете" исходник кода
Вашей сишной ф-ии в виде асемблера, и .....
получаете ответы на большинство вопросов sm.gif
Isaev_ivan
k155la3, это в смысле мне можно написать вот так на языке С?
Код
asm(RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1);

k155la3
Цитата(Isaev_ivan @ Oct 28 2016, 14:38) *
k155la3, это в смысле мне можно написать вот так на языке С?
Код
asm(RSEG  CSTACK
    DS16    0
    RSEG  DATA16_N

N1 ds16 1
N2 ds16 1
N3 ds16 1);


Так Вы можете встроить в сишный код только отдельные команды
asm("nop");

Пытаясь писать на ASM в среде C(PP) Вы пытаетесь работать в "чужом огороде" и не зная "устав".


Соберите проект из 2 сишных файлов. Откомпилируйте.
Если IAR - смотрите файл MyAsmAndC.s43

Код
MyAsmAndC.h
------------
int MyAsm(int);
extern int MyAsm(int);
------------

MyAsmAndC.c
------------
#include "MyAsmAndC.h"

int MyAsm( int in_arg )
{  
    return( in_arg + 1);
};

main.c
------------
#include "MyAsmAndC.h"

int main(void)
{
  dat = 1;
  dat = MyAsm(dat)
  __no_operation(); // BreakPoint            

}
Сергей Борщ
QUOTE (Isaev_ivan @ Oct 28 2016, 14:38) *
это в смысле мне можно написать вот так на языке С?
Вы идете не в ту сторону. Вам не надо тупо пытаться повторить на Си свой ассемблерный код - это тупик. Вам нужно написать на Си код, который будет делать то же самое, что делал ваш ассемблерный код. Что делал этот ваш код?
Isaev_ivan
Сергей Борщ, у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти. Возможно, Вы и правы, нужно пойти по другому пути. Просто язык С для меня новое и поэтому иду напролом) спасибо за советы!
Сергей Борщ
QUOTE (Isaev_ivan @ Oct 28 2016, 17:09) *
у меня АЦП на три канала и данные записываются по адресам этих ячеек памяти.

CODE
#include  <stdint.h>
uint16_t ADC_buffer[3];

Genadi Zawidowski
Аккуратнее... По моим (возможно устаревшим сведениям) для MSP430 был сделан только какой-то форк SDCC (small devices C compiler) - а там никаким stdint.c и не пахло...
AHTOXA
SDCC не работает с msp. Зато есть порт gcc-msp430, и он знает про stdint.h.

ЗЫ. И sdcc сейчас уже знает про stdint.h:)

upd: Ух-ты, теперь оказывается gcc-msp430 под крылом у TI: тыц.
Сергей Борщ
QUOTE (Genadi Zawidowski @ Oct 28 2016, 22:44) *
Аккуратнее... По моим (возможно устаревшим сведениям) для MSP430 был сделан только какой-то форк SDCC (small devices C compiler) - а там никаким stdint.c и не пахло...
Судя по RSEG в сообщении автора темы - это IAR и stdint.h там есть. И вообще - по умолчанию я ориентируюсь на стандарт 99 года. Ориентироваться на стандарт 27-летней давтости ( c89 ) как-то несерьезно.
Isaev_ivan
Здравствуйте, после попытки скомпилировать появилась такая ошибка. Что это может значить??

и кстати, есть ли разница при указании файла .h в <> или ""?
Obam
Есть: в одном случае файл ищется в каталоге проекта, а в другом и в системном.
И кстати, руководство IAR C/C++ Development Guide очень даже для начинающих.
Сергей Борщ
QUOTE (Isaev_ivan @ Oct 30 2016, 22:29) *
после попытки скомпилировать появилась такая ошибка.
Сообщение как-то не вяжется с текстом, на которое указывает. Еще понятно было бы, если бы написал "файл такой-то не найден". Помнится когда-то очень давно в настройках компилятора можно было выбрать "использовать библиотеку clib или dlib". Библиотека dlib была ближе к стандарту 99 года. Поищите, возможно у вас выбрана clib.

P.S. 1) 'crystal" пишется через "y".
2) пляски с __segment_begin не нужны.
Obam
Тогда уж IC или chip вместо crystal, а то получилось - кварц …F1232
Dog Pawlowa
У меня IAR работает что с <>, что "".
Мне кажется, что нарушена целостность среды.
Можно сделать так:
- в свойствах проекта включить "preprocessor output to file", и посмотреть там, что же получается после препроцессора
- переустановить IAR.
- выложить проект для проверки на стороне


Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.