Free soft для ембеддера
16.07.2013, 23:40
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от dosikus
|
eddy, Вариант могу предложить . ITX мать и корпус . ...
Или ноут , у меня ASUS совершенно холодный и тихий , когда кодю.
|
Не пойдет: а куда я там 4 жестких диска запихаю? А если еще пару-тройку прикупить захочу??? Ноут есть, но это же не компьютер: экран малюсенький (всего-то 17''), клавиатуру надо подключать…
Сообщение от Flopix
|
|
eddy, что то перемудрили с конструкцией БП. И что он действительно сильно греется?
|
Пока нагрузки мало, греется слабо. Если добавить еще штук 5 жестких дисков, или сделать "апгрейд", будет греться сильней, наверное. Хотя, думаю, что не потянет он "апгрейданутую" систему: там нужно будет уже киловатта на полтора.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
16.07.2013, 23:52
|
|
|
Гражданин KAZUS.RUN
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: Free soft для ембеддера
eddy, да какой 1,5 квт. Накопители потребляют немного. Обычно мощные БП более чем на 500Вт на домашние ПК ставят только в случае если используется мощная видеокарта и не одна ну илши многопроцессорная (не путать с многоядерная) система на серверной мамке. А так потребление обычно не превышает 150-250 Вт даже с очень мощным и жрущим процессором.
|
|
|
|
04.08.2013, 15:39
|
|
|
Прохожий
Регистрация: 05.02.2009
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Free soft для ембеддера
http://mcuoneclipse.com/2013/08/03/d...t-for-eclipse/
.. посмотрите на этом сайте, много интересного по эклипсу и разным тулчайнам
|
|
|
|
09.06.2014, 10:04
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Free soft для ембеддера
Привет.
Пробую пользовать компилятор SDCC.
Сейчас уткнулся в проблему на работает нормальная такая структура типа union.
Например, описываю в виде: __xdata union f {uchar t[4]; ulong ul;} g;
Обращаюсь к ней как положено (по разному пробовал) - в результате аброкадабра.
В доке про union ничего не нашел.
Где почитать про это или как надо правильно описать этот union в SDCC?
|
|
|
|
09.06.2014, 10:27
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от optical illusion
|
|
Обращаюсь к ней как положено (по разному пробовал) - в результате аброкадабра
|
А что в ассемблерном листинге?
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
09.06.2014, 10:30
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 24.03.2007
Сообщений: 1,398
Сказал спасибо: 85
Сказали Спасибо 678 раз(а) в 396 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от optical illusion
|
Сейчас уткнулся в проблему на работает нормальная такая структура типа union.
Например, описываю в виде: __xdata union f {uchar t[4]; ulong ul;} g;
|
В SDCC не силен, но предположу, что нужно включить побайтное выравнивание.
Типа #pragma pack(1) (или __packed, как в Keil).
|
|
|
|
09.06.2014, 10:44
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от optical illusion
|
Привет. 
Например, описываю в виде: __xdata union f {uchar t[4]; ulong ul;} g;
Обращаюсь к ней как положено (по разному пробовал) - в результате аброкадабра.
|
1) union есть union в любом компиляторе. Так как это конструкция языка си. А вот ваши uchar и ulong к языку не имеют отношения.
Или приведите как вы их объявляете или используйте стандартные определения.
Я бы рекомендовал подключить, фактически ставшую стандартной, stdint и использовать типы uint8_t и uint32_t.
2) union не гарантирует порядок следования. В связи с этим конструкции на базе него, не будут гарантировано переносимыми. Надо иметь это ввиду. В частности 32 битное число может располагаться младшим либо старшим байтом вперёд. Иногда это указывается в компиляторе.
3) union в данном случае можно вообще не использовать. Я, например, не использую. Вполне подходит обычная конструкция, например:
__xdata uint8_t t[4];
uint32_t res;
t[0] = t[2] = t[3] = 0;
t[1] = 5;
res = *(uint32_t *)t; // Обратились к массиву t как к 32-ух битному числу
// значение res будет 0x500
// ну и наоборот
res += 0x10000; // res будет 0x10500
*(uint32_t *)t = res;
// в t будет { 0x00, 0x05, 0x01, 0x00}
|
|
|
|
09.06.2014, 10:49
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от pambaru
|
|
В SDCC не силен, но предположу, что нужно включить побайтное выравнивание.
|
Для приведенного примера это ничего не изменит.
Выравнивание имеет смысл только в структурах c разными типами данных. Да и то, для 8-ми битных процессоров, как правило, по умолчанию выравнивание осуществляется на байт.
|
|
|
|
09.06.2014, 10:55
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Free soft для ембеддера
Программка написана на Кейле, она абсолютно рабочая. Пытаюсь ее перетащить в SDCC.
Типы данных описаны правильно.
union используется в подпрограмме - смысл в том что 4 байта складываются в переменную типа long. Как только я заменяю эту операцию на другой алгоритм сразу все работает. Дело в том, что данные во время вызова union портятся - они не то что бы стабильно одинаковые, они с каждым вызовом очень разные - от 0 до максимума изменяются. Если бы задом наперед - это не проблема. Вопрос в принципе как правильно описать union в SDCC.
Union описана как глобальная структура. Пробовал ее в подпрограмме описать тоже не работает.
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
Последний раз редактировалось optical illusion; 09.06.2014 в 10:58.
|
|
|
|
09.06.2014, 11:48
|
|
|
Гражданин KAZUS.RUN
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Free soft для ембеддера
Сообщение от optical illusion
|
|
Программка написана на Кейле, она абсолютно рабочая.
|
Была бы абсолютно рабочая, то абсолютно работала бы. Бывают такие ошибки, которые проявляются даже от компиляции к компиляции. Механизм прост. Вы некоректно написали программу, и при оптимизации возникает неожидаемое поведение результирующего кода. Оптимизация работает таким образом, что в зависимости от конструкции может измениться. То есть, например, вы добавили одну строку в начале текста, компилятор при оптимизации сработал немного не так и у вас появилась ошибка в середине проги. Надо понимать, что ошибка не появилась, а проявилась. А заложена она была с момента написания. Этот же механизм работает и при переносе с компилятора на компилятор. Другой компилятор сгенерит другой код и абсолютно иными методами будет оптимизировать. Но правильно написанная программа будет работать идентично. Разница может быть лишь в размере и скорости.
|
Цитата:
|
Пытаюсь ее перетащить в SDCC.
Типы данных описаны правильно.
union используется в подпрограмме - смысл в том что 4 байта складываются в переменную типа long.
|
Смысл мне очевиден. Я вам привёл конструкцию, которая полностью заменяет вашу.
|
Цитата:
|
|
Как только я заменяю эту операцию на другой алгоритм сразу все работает. Дело в том, что данные во время вызова union портятся - они не то что бы стабильно одинаковые, они с каждым вызовом очень разные - от 0 до максимума изменяются.
|
Вы даже не понимаете какую глупость вы пишете. НИКАКОЙ union НЕ ВЫЗЫВАЕТСЯ!!!! Это просто указание компилятору, что переменные под разными именами расположены по одному адресу. Как я вам уже описал, здесь, при переносе может быть лишь одна ошибка. Если один компилятор располагает long младшим байтом вперёд, а другой старшим. Порядок следования может определяться настройками компилятора. Хотя судя по вашему описанию Ошибка находится совершенно в другом месте. Например в прерывании либо какая то другая прога портит данные. Насколько я понимаю будут меняться обе переменные.
|
Цитата:
|
Если бы задом наперед - это не проблема. Вопрос в принципе как правильно описать union в SDCC.
Union описана как глобальная структура. Пробовал ее в подпрограмме описать тоже не работает.
|
Ещё раз обращаю ваше внимание. union это базовая конструкция языка. Она ВСЕМИ компиляторами обрабатывается ИДЕНТИЧНО. Нет правильного или неправильного описания. Никто вам не ответит на вопрос правлиьно описать как глобальную переменную или как локальную. Это зависит от вашей программы в целом!!! Если переменная используется ТОЛЬКО в подпрограмме, то она локальная. Если необходимо чтобы её значение не менялось от вызова к вызову, то надо объявить её static. Если данная переменная используется в нескольких процедурах, то она должна быть глобальной, и в процедурах вы должны обеспечить видимость данной переменной.
====
Всё это глобальные вопросы знания языка. Совсем не компилятора. Вы просто не знаете основ языка программирования. Вам надо срочно брать книгу и читать.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:53.
|
|