Отговори на тема  [ 90 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6
"C" въпрос, как се прави това? 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1954
Мнение Re: "C" въпрос, как се прави това?
Показват кой член инициализираш. Може да не искаш да правиш това за всички. Може компилатора ти да няма тази функционалност (.).

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Юли 01, 2020 11:38 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: "C" въпрос, как се прави това?
Да, друг начин за инициализация, мисля че иска C99 поне.


Сря Юли 01, 2020 3:00 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Дек 15, 2014 10:05 pm
Мнения: 324
Мнение Re: "C" въпрос, как се прави това?
stefan63 написа:
Днес малко се заиграх с pic24/XC16.
uint16_t X,Y;
unsigned long Z;
Za=X*Y;
Zb=(unsigned long)(X*Y);
Zc=X;Zc=Zc*Y;

Za е реално младшата дума на произведението; Zb и Zc са коректни.
Реших да погледна какво прави на ниско ниво...и изненада.

Zb - най-интересният случай, се пресмята като произведение на две long числа, по-дълго и по-бавно.Процесорът има специфична инструкция за умножение на две 16-битови с 32битов резултат, но тя не се използва(пряко) от компилатора в случая. Умножава младши , старши(нула) , кръстоосано (нула) и сумира.
Има ли някакъв квалификатор на "C", който трябва да използвам, или това усложняване идва заради ограниченията в оптимизацията, и трябва да го заобиколя през асемблера ?


==============
Off. Инсталирах MPLAB-X (в.4.последна), лаптоп W7-32 на I5. Очаквах трагедии с джавата, но работи цял ден задоволително, само с едно успиване в симулатора. Засега не съм закачал хардуер.


Според мен, тия компилатори ползват някакви общи за всички пикове или поне фамилията инструкции. Все пак няма как за всеки пик да налеят всички инструкции, че и освен пик, трябва и за атмел контролерите (нали Microchip купиха атмел). Резултатът е, че ако твоя пик може да направи нещо с 1 инструкция, то компилаторът няма да я ползва тази инструкция и ще свърши същата работа с пповече инструкции, но пък така кодът ти ще може да се компилира за всички пикове.


Съб Сеп 05, 2020 1:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Re: "C" въпрос, как се прави това?
Компилаторът за атмел няма нищо общо с този за пикльовците - в смисъл развоя им си е отделен, а всъщност незнам дали изобщо развиват нещо за бившите атмелски - и avr, и arm вариантите се клатят с гцц. А там архитектурно са си отделни имплементациите и е съвсем сигурно че оптимизациите са отделни за всеки тип ядро.


Сря Сеп 09, 2020 8:06 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: "C" въпрос, как се прави това? Флагчета и битчета...
Здравейте,
Днеска мигнах 2 лед-лампички на Куртекс, с помощта на stm32cubeMX.
Тепърва ще настъпвам мотиките.
Има една обаче , дето отсега ме плаши.
Кой е най икономичния начин за работа с битови флагове, деклариране.сет,ресет,проверка?
Икономичен по размер на кода, М0 и М3 cortex.


Пет Май 27, 2022 9:11 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Юни 05, 2006 12:48 pm
Мнения: 4393
Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
Мнение Re: "C" въпрос, как се прави това? Флагчета и битчета...
stefan63 написа:
...
Кой е най икономичния начин за работа с битови флагове, деклариране.сет,ресет,проверка?
Икономичен по размер на кода, М0 и М3 cortex.

пази се от прекалено икономисване и оптимизиране на кода...
както беше казал дедо Кнут - premature optimization is the root of all evil :!:
особено като казваш че тепърва се учиш - колкото ти е по-читаем и разбираем кода толкова по-добре за теб и за тези които ще питаш :)
пък по натам ще оптимизираш и тъниш кода

_________________
... ако трети ден не ти се работи... това означава, че е сряда !


Пет Май 27, 2022 11:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: "C" въпрос, как се прави това?
И все пак се налага в тез в ремена на дефицит.
Имам код , който искам да прехвърля на КуртексМ.
Доста проверки и манипулации на единични флагове в 8 и 16 битови променливи.
Притесняват ме и затова питам .
Например
uint16_t wflags;
#define xconstA 0x8000
if (xconstA & wflags) .....

Има ли по-икономичен начин , например
#define xconstA (1<<15)
ще даде ли икономия?


Съб Май 28, 2022 6:33 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: "C" въпрос, как се прави това?
Код:
#define bitset(byte,nbit)   ((byte) |=  (1<<(nbit)))
#define bitclear(byte,nbit) ((byte) &= ~(1<<(nbit)))
#define bitflip(byte,nbit)  ((byte) ^=  (1<<(nbit)))
#define bitcheck(byte,nbit) ((byte) &   (1<<(nbit)))

_________________
https://github.com/slav4ocom/


Съб Май 28, 2022 11:53 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: "C" въпрос, как се прави това?
Това помага ли да е по-къс кода ? Ясно ми е , че въъпросът е твърде специфичен.


Съб Май 28, 2022 1:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: "C" въпрос, как се прави това?
сорс кода да - пишеш просто bitset(regitster1, bit2); примерно. Това е универсално.
Иначе на ниво инструкции предполагам ползва няколко, прави read-modify-write.
С една инструкция би станало ако вмъкнеш асемблер и има bsf bcf инструкции както при пиковете.
Отделно, при 8051 ядрата има адреси на битове примерно някои флагове си имат адреси, инстинктивно логиката е да се адресират само байтове но има адреси за определени битове, които са описани в хедърите. На това ядро не знам как е.

_________________
https://github.com/slav4ocom/


Съб Май 28, 2022 1:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: "C" въпрос, как се прави това? CortexM/IAR
Боря се с Куртексите, засега само теоретично, ама то е до време.
Та чета , и не мога да схвана къде какво да напиша...

Имам таблица с вектори за прекъсванията, после искам да се разполага бутлоадер.
После , примерно на отместване 0x1000 искам да разположа кода на главната програма:
първо - таблица с вторични адреси за прекъсвания , после самия код.
Гледам в пакета върви асемблерски файл , в който мога да модифицирам функциите за прекъсвания и да
ги насочвам или към бутлудера , или към вторичната таблица. Другият вариант е функциите за прекъсване
на бутлудера да пренасочват към вторичната таблица. Вероятно вторият вариант е по-добър ....(не видях да има регистър за "преместване" на таблицата.) .
Дотук добре...обаче - да речем , че в бутлудера има няколко функции и мога да им укажа адрес , та да се разположат в началото(Не разбрах как да укажа секция с име MySect1 и адрес 0, размер 4к).
И как да обявя секция от 0x1000 нагоре и да фиксирам вторичната таблица да е в началото, а всички останали приложни функции да са след нея? И линкерът да не се опитва да набутва нещо в празниниата между бутлудера и 0x1000?


Пет Юли 22, 2022 3:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: "C" въпрос, как се прави това?
трябва ти линкер скрипта

правиш твоя секция ( някъде трябва да имаш линкер скрипт файл )
https://github.com/Wiz-IO/framework-wiz ... ult.ld#L45

насочваш функцията да се линква там
void
__attribute__((__section__(".boot2")))
fooo(uint32_t booo){ .... }

пример
https://community.silabs.com/s/article/ ... uage=en_US

_________________
main[-1u]={1};


Пет Юли 22, 2022 4:46 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: "C" въпрос, как се прави това?
Това , което ръчкам в момента, има един къс файл , който описва ROM,RAM, нещо за размера на стека,
някакъв адрес за векторите. Само няколко реда е, не е толкова голям като скрипт-файла, който показваш....
Както и да е ...ще си поиграя с тоя файл другата седмица...
Ако има и други съвети - добре дошли!


Пет Юли 22, 2022 9:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4671
Мнение Re: "C" въпрос, как се прави това?
туй е за GCC

_________________
main[-1u]={1};


Пет Юли 22, 2022 10:03 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: "C" въпрос, как се прави това?
slav4o.com написа:
сорс кода да - пишеш просто bitset(regitster1, bit2); примерно. Това е универсално.
Иначе на ниво инструкции предполагам ползва няколко, прави read-modify-write.
С една инструкция би станало ако вмъкнеш асемблер и има bsf bcf инструкции както при пиковете.
Отделно, при 8051 ядрата има адреси на битове примерно някои флагове си имат адреси, инстинктивно логиката е да се адресират само байтове но има адреси за определени битове, които са описани в хедърите. На това ядро не знам как е.

Ами може да спести и инструкции, понякога се случва разликата между работещ и неработещ код да е използване на побитови и стеукции. От гледна точка преносимост и четимост не е добре, но се случва. Примерно на 8051 ядрата на силабс, въпреки че ядрото е 48 мхц за да направиш повече от един канал софтуерен протокол като за адресите и ледове си иска използване на побитовитее инструкции, и ли пишеш на асемблер, или пишеш на С по начин и с оптимизации които ги използват. Никак не е достатъчно бра практика но работейки с дребосъци се налага.


Пет Юли 22, 2022 10:21 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 90 мнения ]  Отиди на страница Предишна  1, 2, 3, 4, 5, 6

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни