Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 30.10.2017, 23:00   #1
Disall
Junior Member
 
Аватар для Disall
 
Регистрация: 08.09.2010
Возраст: 46
Сообщений: 19
Вес репутации: 100/32
Disall will become famous soon enoughDisall will become famous soon enough
По умолчанию Нужен опыт по началу программированию на С.

Здравствуйте!
Все время программировал на ассемблере для микроконтроллеров. Теперь просто необходимость научиться программировать на С. Кто какую среду разработки использует и какие компиляторы? Я все время использовал MPLAB. Есть ICD3. Есть железка на 16F690, для нее надо написать программу. Что почитать/посмотреть по теории?
Спасибо.
__________________
Если с проблемой не переспать, то решение не родится...
Disall вне форума   Ответить с цитированием
Старый 31.10.2017, 01:31   #2
CERGEI
Senior Member
 
Аватар для CERGEI
 
Регистрация: 11.07.2009
Возраст: 36
Сообщений: 526
Вес репутации: 183/41
CERGEI has a spectacular aura aboutCERGEI has a spectacular aura about
По умолчанию Re: Нужен опыт по началу программированию на С.

Вы сильно отстали,как и я.
stm32+keil к примеру.
CERGEI вне форума   Ответить с цитированием
Старый 31.10.2017, 10:03   #3
_WIL_
Senior Member
 
Регистрация: 26.11.2009
Адрес: Беларусь
Сообщений: 709
Вес репутации: 1181/52
_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of_WIL_ has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Disall Посмотреть сообщение
Что почитать/посмотреть по теории?
"Язык программирования C" Брайан У. Керниган, Деннис М. Ритчи
_WIL_ вне форума   Ответить с цитированием
Старый 31.10.2017, 10:17   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Disall
Кто какую среду разработки использует и какие компиляторы? - среда - eclipse, mplabx или вообще просто vim, если нет смысла отлаживаться с аппаратным отладчиком.

из тех что вообще сталкивался последние месяцы.
компиляторы pic14/pic16/stm8 - sdcc. pic24/pic32 - xc32.

начать что-либо делать, ознакомившись с примерами - C и asm очень похожи, так что вряд-ли потребуется какое-либо детальное ознакомление с литературой.
besogon вне форума   Ответить с цитированием
Старый 31.10.2017, 10:45   #5
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

в предыдущем посте ошибка.
pic24 - xc16. xc16, как и xc32 суть gcc.
besogon вне форума   Ответить с цитированием
Старый 31.10.2017, 19:20   #6
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 795
Вес репутации: 1418/54
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Disall Посмотреть сообщение
Есть железка на 16F690, для нее надо написать программу. Что почитать/посмотреть по теории?
Спасибо.
для этой железки 8-го мрлаба и компилятора hi-tech picc 9.60std выше крыши , ну или ХС8 .
из почитать справочник по Си и мануал на компилятор . И и все, этого достаточно.
DmitrijVDN вне форума   Ответить с цитированием
Старый 27.01.2018, 09:13   #7
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 39
Сообщений: 36
Вес репутации: 100/24
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Ребята, подскажите. Я только начинаю писать на Си. Моя проблема: есть main файл, есть куча переменных, массивы по 64 байта. Моё понятие - делаю их все(переменные и массивы) глобальными (extern) в main и они (должны быть видны, по моему мнению) в, допустим, 20 других файлах. Из main последовательно вызываются функции обработки буфера данных из написанных в 20 файлах. То есть, 1-ый файл обработал буфер, вывел данные во внешний мир, возвращаемся в main, затем буфер обрабатывается функциями из 2-го файла, и так все 20 файлов. Потом снова с 1-го и по циклу. Но так не работает! Нашёл пример в книге: описываю переменные в main, а в 20 файлах их снова описываю как EXTERN... блин, это ж куча кода. Посмотрел на демо примере в MPLAB X, там переменная пишется в Хедер файле, он в свою очередь include в main, далее переменная видится в других файлах... Вроде так... Может я ошибаюсь. Помогите разобраться...
Aleksey_ вне форума   Ответить с цитированием
Старый 27.01.2018, 10:04   #8
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 1,959
Вес репутации: 3578/78
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Aleksey_
в Си обычно пытаются реализовать задачу с помощью модулей.
Вот берется какая-то крупная задача, в ней выделяются какие-то подзадачи, они в свою очередь содержат модули.

Модуль это какой-то самодостаточный объект, с которым можно иметь дело другим модулям.

например
Код:
/** workarea for ssd1331 entry
 */
typedef struct cc110l_e {
        rft_t rft;
	u16 packet_size;
	u16 max_packet_size;
	u8 channel;
	u8 channel_max;
	u16 byterate;			/* byterate is shifter, not real value */
	pthread_cond_t waitint_cond;
        spi_entry_t* spi;
        pic32mx_port_t* cs_port;
        u16 cs_mask;
        u16 spi_mtu;
        u8 int0;
        u8 int1;
        u8 baud;
        u8 access_delay;
	b8 varlength;
} cc110l_e_t;
...

/**
 * init cc110l
 * @param entry
 * @param config
 * @return true, if success
 */
void cc110l_init(cc110l_e_t* restrict rb,
		 const cc110l_config_t* restrict conf)
{
	cc110l_status_t chip_stat;
	u8 zero_reg_burst_write;

	/*init spi*/
	rb->spi = conf->spi;
	rb->cs_port = conf->cs_port;
	rb->cs_mask = 1 << conf->cs_port_bit;
...

...
/**
 * tx data packet throw radio module
 * @param rb		- radio backend
 * @param data		- data pointer
 * @param count		- data count in data pointer,
 * 			data over packet size is ignored,
 * 			data under packet size is zero-extended
 * @param msecs		- msecs to transmit
 * @return 		- true if success
 */
b8 cc110l_transmit(cc110l_e_t * restrict rb,
		   const u8* restrict data,
		   u32 count,
		   u32 msecs)
{
	b8 result;
	u8 cnt;
...
иначе говоря, стараются свести к минимуму содержание переменных в файлах.

если у Вас что-то там где-то работает с буфером каким-то там образом, то самый логичный способ, это делать функции, которые принимают указатель на буфер.

глобалок должно быть минимум и обычно они по большей части дружно сидят в неком файле с глобалками.

я ответил на вопрос?
besogon вне форума   Ответить с цитированием
Старый 27.01.2018, 18:09   #9
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 39
Сообщений: 36
Вес репутации: 100/24
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от besogon Посмотреть сообщение
Aleksey_
в Си обычно пытаются реализовать задачу с помощью модулей.
Вот берется какая-то крупная задача, в ней выделяются какие-то подзадачи, они в свою очередь содержат модули.
Это я понимаю. Ребят, я не гуру в программировании и ни одного PIC не запустил. Реально я пробовал писать для себя простенькие задачки на Си лет 6 назад(тогда думал стать компьютерным программистом, изучал Дельфи). Года 4 назад увидел светодиодный куб и тогда узнал о существовании PIC и AVR. Вот тогда и уперся в АСМ(пример программы был на АСМ по нему и учился). А вот сейчас на Си думаю писать, так как пришло понятие, что на Си можно написать более универсальную программу.
Цитата:
Сообщение от besogon Посмотреть сообщение
иначе говоря, стараются свести к минимуму содержание переменных в файлах.

если у Вас что-то там где-то работает с буфером каким-то там образом, то самый логичный способ, это делать функции, которые принимают указатель на буфер.

глобалок должно быть минимум и обычно они по большей части дружно сидят в неком файле с глобалками
прислушаюсь к советам. Просто друзей нет подсказать по телефону или так, при общении, а в книге или инете сразу не поймёшь что к чему(как начинающему)
Aleksey_ вне форума   Ответить с цитированием
Старый 27.01.2018, 10:49   #10
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 48
Сообщений: 158
Вес репутации: 1161/28
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Моя проблема: есть main файл, есть куча переменных, массивы по 64 байта. Моё понятие - делаю их все(переменные и массивы) глобальными (extern) в main и они (должны быть видны, по моему мнению) в, допустим, 20 других файлах.
Глобальные переменные - зло. Иногда неизбежное. Если один буфер требуется в 20 модулях - значит неверно разбиение проекта на модули. Каждый модуль должен заниматься своим делом и своими данными. Наружу торчит (публикуется в .h-интерфейсе модуля) только то, что необходимо другим модулям. И чем меньше торчит - тем защищённее модуль от воздействия извне. Человек может удерживать в голове единовременно три факта максимум, а программист - один файл кода, впрочем как и компилятор. Программисту легче сконцентрироваться на проблеме если всё находится в одном месте, а компилятору - оптимизировать. Однажды обильно политый потом и слезами, покрытый матюками модуль можно после всего этого [в идеале] таскать из проекта в проект не опасаясь что в нём что-то развалится под давлением [,типа,] "непредсказуемых" обстоятельств.
Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Из main последовательно вызываются функции обработки буфера данных из написанных в 20 файлах. То есть, 1-ый файл обработал буфер, вывел данные во внешний мир, возвращаемся в main, затем буфер обрабатывается функциями из 2-го файла, и так все 20 файлов. Потом снова с 1-го и по циклу. Но так не работает!
ЧТД [Дадим каждому риторическому вопросу риторический ответ! :-D]
Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Нашёл пример в книге: описываю переменные в main, а в 20 файлах их снова описываю как EXTERN... блин, это ж куча кода.
Извините за троллинг, в детском садике нас заставляли мыть руки после туалета и прогулок - но это-же куча воды тратится! :-)
Модуль - единица компиляции, компилятор при работе видит только то, что подключено (#include) в этот модуль. Он не имеет понятия ни что содержится в других модулях ни о бродящих в нашей голове мыслях. И чем больше у компилятора информации о том, с чем он работает - тем больше наших ошибок он сможет отловить ещё на этапе компиляции, а не в железе короткими бессонными ночами накануне сдачи заказчику.
Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Посмотрел на демо примере в MPLAB X, там переменная пишется в Хедер файле, он в свою очередь include в main, далее переменная видится в других файлах...
Всякий "компилятор" имеет в багажнике что-то мумифицированное - поэтому изучение вопроса хорошо-бы начинать с чтения теоретических книжек про то, как оно должно быть правильно - и вложившись таким образом в базовые знания поимеете больший контроль над происходящим - стандартное поведение они все уже худо-бедно отрабатывают.
siarzhuk вне форума   Ответить с цитированием
Старый 27.01.2018, 18:15   #11
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 39
Сообщений: 36
Вес репутации: 100/24
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от siarzhuk Посмотреть сообщение

ЧТД [Дадим каждому риторическому вопросу риторический ответ! :-D]

Извините за троллинг, в детском садике нас заставляли мыть руки после туалета и прогулок - но это-же куча воды тратится! :-)
Модуль - единица компиляции, компилятор при работе видит только то, что подключено (#include) в этот модуль. Он не имеет понятия ни что содержится в других модулях ни о бродящих в нашей голове мыслях. И чем больше у компилятора информации о том, с чем он работает - тем больше наших ошибок он сможет отловить ещё на этапе компиляции, а не в железе короткими бессонными ночами накануне сдачи заказчику.
Неправильно описал проблему. Из-за незнания синтаксиса и что-где вставить или наисать(extern допустим переменную), у меня ошибки выдаёт, которые я пока непонимаю и пока поймёшь, куча времени уходит.
Aleksey_ вне форума   Ответить с цитированием
Старый 27.01.2018, 18:17   #12
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 39
Сообщений: 36
Вес репутации: 100/24
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
поэтому изучение вопроса хорошо-бы начинать с чтения теоретических книжек про то, как оно должно быть правильно - и вложившись таким образом в базовые знания поимеете больший контроль над происходящим - стандартное поведение они все уже худо-бедно отрабатывают.
да, теперь книжки сначала почитаю, просто хотел простенькие функции написать для начала... ) невтерпёж ведь )
Aleksey_ вне форума   Ответить с цитированием
Старый 27.01.2018, 18:46   #13
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 39
Сообщений: 36
Вес репутации: 100/24
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Re: Нужен опыт по началу программированию на С.

Давайте по другому задам вопрос(чтоб на верный путь сразу направили). Когда я писал на ассемблере, у меня было 9 буферов по 64 байта и куча разных переменных, которые применялись почти во всех файлах с функциями обработки буферами(буферы обрабатывались во всех). Плюс куча констант, массивов данных, которые были в PSV области. Мне нужна видимость всех этих переменных(если писать на Си) и буферов и констант для всех файлов ***.с. Конкретнее: пишу про светодиодный куб, буфер 64 байта, каждый бит байта это LED. Допустим файл Effect_1.c обработал буфер, вывел его наружу, больше его не трогает. Далее Effect_2.c свой эффект создаёт. И так далее. Мне нужна в каждом Effect_Х.c видимость переменных и прочего. Могу ли я создать всё(переменные) в *.h, инклудить к Майну, и от него уже все Effect_Х.c видят это. Или я инклудю *.h во все Effect_Х.c?
Или как по другому?

Последний раз редактировалось Aleksey_; 27.01.2018 в 18:57.
Aleksey_ вне форума   Ответить с цитированием
Старый 27.01.2018, 17:58   #14
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,797
Вес репутации: 5397/164
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Нужен опыт по началу программированию на С.

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Ребята, подскажите. Я только начинаю писать на Си. Моя проблема: есть main файл, есть куча переменных, массивы по 64 байта. Моё понятие - делаю их все(переменные и массивы) глобальными (extern) в main и они (должны быть видны, по моему мнению) в, допустим, 20 других файлах. Из main последовательно вызываются функции обработки буфера данных из написанных в 20 файлах. То есть, 1-ый файл обработал буфер, вывел данные во внешний мир, возвращаемся в main, затем буфер обрабатывается функциями из 2-го файла, и так все 20 файлов. Потом снова с 1-го и по циклу. Но так не работает! Нашёл пример в книге: описываю переменные в main, а в 20 файлах их снова описываю как EXTERN... блин, это ж куча кода. Посмотрел на демо примере в MPLAB X, там переменная пишется в Хедер файле, он в свою очередь include в main, далее переменная видится в других файлах... Вроде так... Может я ошибаюсь. Помогите разобраться...
очень полезно сказать, какой у вас пик (серия).
Greg вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электропривод NSS Источники питания и силовая электроника 32 29.01.2012 14:17
MAX232 и USART, отсутствует сигнал на выходе. EviL_LaugH Общетехнические вопросы 15 31.01.2011 00:40
Проблема с прерыванием PIC 16F877A . chiraevevgenii Вопросы начинающих 8 13.01.2011 20:13
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00


Часовой пояс GMT +3, время: 06:26.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot