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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 30.05.2018, 17:50   #1
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 40
Сообщений: 204
Вес репутации: 105/50
alex_new_2030 will become famous soon enoughalex_new_2030 will become famous soon enough
Отправить сообщение для alex_new_2030 с помощью ICQ
По умолчанию Подскажите по указателям

Здравствуйте!
вызываю допустим функцию
Код:
SSD1306_Out8("Пример");
сама функция имеет цикл
Код:
void SSD1306_Out8(const char *texto){
		while( *texto ){
			SSD1306_Chr( *texto++);
		};

}
мне надо что бы цикл по константе прошел два раза. Делаю так:
Код:
void SSD1306_Out8(const char *texto){
	for (ii=0;ii<=1;ii++){
		while( *texto ){
			SSD1306_Chr( *texto++);
		};
         };
}
Но второй раз по строке цикл while не пробегает. Нужно как-то начать цикл по строке с начала. Но как это указать ни как не соображу
Подскажите пожалуйста как начать цикл while сначала строки?
alex_new_2030 вне форума   Ответить с цитированием
Старый 30.05.2018, 18:58   #2
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

Код:
#define MAX_PRINT_LENGTH	20
...
void SSD1306_Out8(const char *texto){
	const char* restrict data;

	for (uf ii=0;ii<=1; ++ii){
		data = texto;
		for(uf lim = MAX_PRINT_LENGTH; (*data) && (lim); --lim){
			SSD1306_Chr( *data++);
		};
         };
}
besogon вне форума   Ответить с цитированием
Старый 30.05.2018, 19:20   #3
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 40
Сообщений: 204
Вес репутации: 105/50
alex_new_2030 will become famous soon enoughalex_new_2030 will become famous soon enough
Отправить сообщение для alex_new_2030 с помощью ICQ
По умолчанию Re: Подскажите по указателям

Спасибо! натолкнуло на такое решение:
Код:
void SSD1306_Out8(const char *texto){
	const char *data;

	data = texto;
	for (uf ii=0;ii<=1; ++ii){
		while(*texto){
			SSD1306_Chr( *texto++);
		};
                texto=data;
         };
}
Работает.
alex_new_2030 вне форума   Ответить с цитированием
Старый 30.05.2018, 19:25   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

alex_new_2030
почитайте про указатели. в интернете есть множество достойных материалов.

не работаете со строками, как будто бы они всегда нуль-терминированные.
редко когда имеет смысл работать со строками бесконечной длины - старайтесь ограничивать длину.

на ssd1306 Вы больше 20 букв не выведите - ну ограничьте 20 буквами метод Ваш.
besogon вне форума   Ответить с цитированием
Старый 30.05.2018, 19:33   #5
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 40
Сообщений: 204
Вес репутации: 105/50
alex_new_2030 will become famous soon enoughalex_new_2030 will become famous soon enough
Отправить сообщение для alex_new_2030 с помощью ICQ
По умолчанию Re: Подскажите по указателям

Спасибо за совет.
alex_new_2030 вне форума   Ответить с цитированием
Старый 31.05.2018, 11:35   #6
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 48
Сообщений: 413
Вес репутации: 689/46
pasha_zv is a splendid one to beholdpasha_zv is a splendid one to beholdpasha_zv is a splendid one to beholdpasha_zv is a splendid one to beholdpasha_zv is a splendid one to beholdpasha_zv is a splendid one to behold
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от alex_new_2030 Посмотреть сообщение
Здравствуйте!
вызываю допустим функцию
Код:
SSD1306_Out8("Пример");
сама функция имеет цикл
Код:
void SSD1306_Out8(const char *texto){
		while( *texto ){
			SSD1306_Chr( *texto++);};
}
а не правильнее будет писать так:

void SSD1306_Out8(const rom char *texto)
__________________
я - кузнец. я не могу ни куя.
pasha_zv вне форума   Ответить с цитированием
Старый 31.05.2018, 11:46   #7
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

pasha_zv
квалификатор const для данных, на которые указывает указатель означает, что мы не собираемся модифицировать данные через этот указатель.

rom это нестандартный квалификатор си-подобных компиляторов, который является атрибутом хранения.

иначе говоря, мне не понятно, почему вдруг строка не может оказаться в RAM и зачем использовать нестандартные квалификаторы хранения для этой функции вообще?
besogon вне форума   Ответить с цитированием
Старый 31.05.2018, 11:59   #8
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 40
Сообщений: 204
Вес репутации: 105/50
alex_new_2030 will become famous soon enoughalex_new_2030 will become famous soon enough
Отправить сообщение для alex_new_2030 с помощью ICQ
По умолчанию Re: Подскажите по указателям

а если я в функцию передаю не только константу "пример", но и массив-строку.
Код:
SSD1306_Out8(&stroka[0]);
В принципе все работает, но как правильно делать?
alex_new_2030 вне форума   Ответить с цитированием
Старый 31.05.2018, 12:34   #9
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 46
Сообщений: 1,694
Вес репутации: 2423/83
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от alex_new_2030 Посмотреть сообщение
а если я в функцию передаю не только константу "пример", но и массив-строку.
Код:
SSD1306_Out8(&stroka[0]);
В принципе все работает, но как правильно делать?

&stroka[0] и просто stroka - это одно и то-же.
DimaS вне форума   Ответить с цитированием
Старый 31.05.2018, 15:28   #10
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,500
Вес репутации: 2750/83
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от alex_new_2030 Посмотреть сообщение
Спасибо! натолкнуло на такое решение:
Код:
void SSD1306_Out8(const char *texto){
	const char *data;

	data = texto;
	for (uf ii=0;ii<=1; ++ii){
		while(*texto){
			SSD1306_Chr( *texto++);
		};
                texto=data;
         };
}
Работает.
Код:
void SSD1306_Out8(const char *texto){
	for (uf ii=0;ii<=1; ++ii) for(uf i=0; texto[i]; SSD1306_Chr(texto[i++]));
}
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 31.05.2018, 15:50   #11
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 40
Сообщений: 204
Вес репутации: 105/50
alex_new_2030 will become famous soon enoughalex_new_2030 will become famous soon enough
Отправить сообщение для alex_new_2030 с помощью ICQ
По умолчанию Re: Подскажите по указателям

А что такое uf в описании цикла for? хайтеч ругается на uf
В устройстве проверить не могу сейчас. Но думаю заработает. Спасибо!
alex_new_2030 вне форума   Ответить с цитированием
Старый 31.05.2018, 16:01   #12
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

alex_new_2030
переопределенный тип, короткое имя для беззнакового типа, быстрого для данной архитектуры.

пример для pic32mx что я использую в своем arch.h, что подключаю к тому, чтобы писать код.
Код:
/**
 * short names for types
 * only for gcc compilier
 */
typedef unsigned char u8;
typedef __signed char s8;
typedef unsigned short int u16;
typedef short int s16;
typedef unsigned int u32;
typedef int s32;
__extension__
typedef unsigned long long int u64;
__extension__
typedef long long int s64;
typedef unsigned int uf;
typedef int sf;
понятное дело что Вы можете переопределить свои имена типов или использовать те, что у Вас есть или использовать stdint.h

вообще говоря используя переопределенные типы меньше проблем с переносимостью кода.
besogon вне форума   Ответить с цитированием
Старый 31.05.2018, 16:44   #13
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,500
Вес репутации: 2750/83
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от alex_new_2030 Посмотреть сообщение
А что такое uf в описании цикла for? хайтеч ругается на uf
В устройстве проверить не могу сейчас. Но думаю заработает. Спасибо!
Не знаю, с besogon - а скопипастил
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 12.05.2019, 15:35   #14
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 43
Сообщений: 4,500
Вес репутации: 2476/116
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Опять мне понадобились указатели..и возникла проблема..
Нужно за минимальное время вызвать одну из 36 функций в зависимости от значения переменной..
В функциях присвоение некоего значения регистру, но есть два вида регистров, младшие и старшие (возможно младшие и старшие 8 бит от 16 битного регистра), так они описаны в библиотеке
PHP код:
       #define PWM_1_COMPARE1_LSB    (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG)
       #define PWM_1_COMPARE1_LSB_PTR ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG)
       #define PWM_1_COMPARE2_LSB    (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D1_REG)
       #define PWM_1_COMPARE2_LSB_PTR ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D1_REG)
       #define PWM_1_COUNTERCAP_LSB   (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__A1_REG)
       #define PWM_1_COUNTERCAP_LSB_PTR ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__A1_REG)
       #define PWM_1_COUNTER_LSB     (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__A0_REG)
       #define PWM_1_COUNTER_LSB_PTR  ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__A0_REG)
       #define PWM_1_CAPTURE_LSB     (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__F1_REG)
       #define PWM_1_CAPTURE_LSB_PTR  ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__F1_REG) 
Я хотел было вызывать одну из функций через SWITCH-CASE но в этой конструкции контроллер пробежит по всем CASE для проверки а не сразу перепрыгнет на нужную, а у меня нет на это времени..

Задал указатель
PHP код:
reg8   *pwm[36]=
{
   & 
PWM_1_COMPARE1_LSB,
    
PWM_1_COMPARE1_LSB_PTR,
   & 
PWM_2_COMPARE1_LSB,
    
PWM_2_COMPARE1_LSB_PTR,
   & 
PWM_3_COMPARE1_LSB,
    
PWM_3_COMPARE1_LSB_PTR,
  & 
PWM_4_COMPARE1_LSB,
    
PWM_4_COMPARE1_LSB_PTR,
  & 
PWM_5_COMPARE1_LSB,
    
PWM_5_COMPARE1_LSB_PTR,
  & 
PWM_6_COMPARE1_LSB,
    
PWM_6_COMPARE1_LSB_PTR,
  & 
PWM_7_COMPARE1_LSB,
    
PWM_7_COMPARE1_LSB_PTR,
  & 
PWM_8_COMPARE1_LSB,
    
PWM_8_COMPARE1_LSB_PTR,
  & 
PWM_9_COMPARE1_LSB,
    
PWM_9_COMPARE1_LSB_PTR,
  & 
PWM_10_COMPARE1_LSB,
    
PWM_10_COMPARE1_LSB_PTR,
  & 
PWM_11_COMPARE1_LSB,
    
PWM_11_COMPARE1_LSB_PTR,
  & 
PWM_12_COMPARE1_LSB,
    
PWM_12_COMPARE1_LSB_PTR,
  & 
PWM_13_COMPARE1_LSB,
    
PWM_13_COMPARE1_LSB_PTR,
  & 
PWM_14_COMPARE1_LSB,
    
PWM_14_COMPARE1_LSB_PTR,
  & 
PWM_15_COMPARE1_LSB,
    
PWM_15_COMPARE1_LSB_PTR,
  & 
PWM_16_COMPARE1_LSB,
    
PWM_16_COMPARE1_LSB_PTR,
  & 
PWM_17_COMPARE1_LSB,
    
PWM_17_COMPARE1_LSB_PTR,
  & 
PWM_18_COMPARE1_LSB,
    
PWM_18_COMPARE1_LSB_PTR
}; 
зачем амперсанд сам не знаю-но без него компилятор ругается..

Задаю значения так
PHP код:
    if(DMADDR[1]==dmxcount) *pwm[1]= readData;
    if(
DMADDR[2]==dmxcount) *pwm[2]=readData;
    if(
DMADDR[3]==dmxcount) *pwm[3]=readData
В итоге где амперсанд те каналы работают, а где нет не работают..
Попробовал амперсанд поставить везде-ошибка компиляции
maagalex вне форума   Ответить с цитированием
Старый 12.05.2019, 21:13   #15
DimaS
Senior Member
 
Регистрация: 05.04.2008
Адрес: Israel
Возраст: 46
Сообщений: 1,694
Вес репутации: 2423/83
DimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond reputeDimaS has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от maagalex Посмотреть сообщение
через SWITCH-CASE но в этой конструкции контроллер пробежит по всем CASE для проверки а не сразу перепрыгнет на нужную,

Смени компилятор на нормальный.
DimaS вне форума   Ответить с цитированием
Старый 12.05.2019, 21:17   #16
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

maagalex
ознакомившись с Вашей проблемой предполагаю, что Вы что-то делаете очень сильно не так, как надо.

если Вы сформулируете задачу, то скорее всего Вам смогут подсказать, что Вам делать.
besogon вне форума   Ответить с цитированием
Старый 12.05.2019, 21:33   #17
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 43
Сообщений: 4,500
Вес репутации: 2476/116
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от DimaS Посмотреть сообщение
Смени компилятор на нормальный.
Компилятор ARM GCC 5.4 с оптимизацией по скорости,
конструкцию SWITCH-CASE специально испытывал, и как и предполагал она ооочень медленная, буквально с 3 строками условий сбои ,а с 18 строками вообще все тормозит..

По задаче..вроде как описал..я принимаю пакеты DMX и раскидываю байты по ШИМ ам..Так вот проблема в том что ШИМы двухканальные, у каждого есть два регистра для двух значений ,а мне нужно просто одной командой забросить одно значение в один регистр, а сделать это можно только через указатели..
Помогайте, а то сами будите смотреть Евровидение по тв с мерцающими декорациями
maagalex вне форума   Ответить с цитированием
Старый 12.05.2019, 21:39   #18
bzx
Senior Member
 
Аватар для bzx
 
Регистрация: 25.02.2007
Адрес: St. Petersburg
Возраст: 46
Сообщений: 499
Вес репутации: 1159/62
bzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud ofbzx has much to be proud of
Отправить сообщение для bzx с помощью ICQ Отправить сообщение для bzx с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от maagalex Посмотреть сообщение
В итоге где амперсанд те каналы работают, а где нет не работают..
Попробовал амперсанд поставить везде-ошибка компиляции
Следует правильно объявить массив указателей на функцию, а потом правильно вызвать. Как-то так:
Код:
reg8 (*actions[36]) (reg8) = {
// список твоих функций

};

for( i = 1; i <= 36 ; i++ ) {
	if( DMADDR[1] == dmxcount )
		( *pwm[1] )( readData );
}
__________________
Для связи email: info собака qbit.su
bzx вне форума   Ответить с цитированием
Старый 12.05.2019, 21:52   #19
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,536
Вес репутации: 4887/117
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от maagalex Посмотреть сообщение
Компилятор ARM GCC 5.4 с оптимизацией по скорости,
конструкцию SWITCH-CASE специально испытывал, и как и предполагал она ооочень медленная, буквально с 3 строками условий сбои ,а с 18 строками вообще все тормозит..

По задаче..вроде как описал..я принимаю пакеты DMX и раскидываю байты по ШИМ ам..Так вот проблема в том что ШИМы двухканальные, у каждого есть два регистра для двух значений ,а мне нужно просто одной командой забросить одно значение в один регистр, а сделать это можно только через указатели..
Помогайте, а то сами будите смотреть Евровидение по тв с мерцающими декорациями
Смешно. Уже не успел. Могу прикрыть, вот так сделать, правда для меня одноразово: https://wik-end.com/news/obschestvo/...tvo_9411.html? можно даже по всей стране. Мерцать ничего не будет. Это шутка.
ampersant вне форума   Ответить с цитированием
Старый 12.05.2019, 21:57   #20
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

Вы принимаете как-то какую-то команду, синтаксический анализ которой дает Вам на выходе пару - номер ШИМ, значение скважности?

если да, то я бы сделал это следующим образом:
1) определил структуру ШИМ модуля.
2) сделал массив указателей на ШИМ модули.
3) указатель на нужный ШИМ это тогда начало листа со смещением номера ШИМ.
4) модифицировал нужные регистры выбранного ШИМ исходя из скважности.

На мой взгляд это простой способ решения Вашей проблемы.
gcc компилятор собирает нормальный код.
besogon вне форума   Ответить с цитированием
Старый 13.05.2019, 01:38   #21
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 43
Сообщений: 4,500
Вес репутации: 2476/116
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от besogon Посмотреть сообщение
Вы принимаете как-то какую-то команду, синтаксический анализ которой дает Вам на выходе пару - номер ШИМ, значение скважности?
Нет..значения я принимаю по последовательному порту, и с приемом кажого значения я попадаю в прерывание по UART и мне нужно принятое значение поместить в регистр ШИМ модуля..
Проблема в том что этих регистров много и они не в массиве чтобы просто а[b]=x , а модифицируются вызовом функций..
То есть нужно как то создать массив указателей чтобы уже через них присваивать значения тем регистрам, я это сделал но получилось только с регистрами с двумя звездочками, а там где одна либо компилятор ругается, либо компилируется но при работе не меняется содержание регистра..
PHP код:
       #define PWM_1_COMPARE1_LSB    (*(reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG) 
       #define PWM_1_COMPARE1_LSB_PTR ((reg8 *) PWM_1_PWMUDB_sP8_pwmdp_u0__D0_REG) 
Пробовал делать указатели на сами функции, тоже была какая то ошибка что функции не того вида какого должны быть чтобы на них ссылаться через указатели..
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 06:17   #22
BarsTmb
Senior Member
 
Аватар для BarsTmb
 
Регистрация: 30.03.2011
Адрес: Тамбов
Возраст: 51
Сообщений: 350
Вес репутации: 1363/48
BarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud ofBarsTmb has much to be proud of
По умолчанию Re: Подскажите по указателям

Вы где-то недопоняли с дефайнами… Первая строка - макрос для доступа к регистру. Вторая - указатель на тот же регистр (о чем ненавязчиво напоминает _PTR в имени).
Амперсандом Вы опять же делаете из регистра указатель. У вас инициализируется массив указателей, причем по две соседние строки одним и тем же.
__________________
Присмотрелись мы - и действительно!
BarsTmb вне форума   Ответить с цитированием
Старый 13.05.2019, 09:24   #23
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

maagalex
и они не в массиве чтобы просто а[b]=x , а модифицируются вызовом функций.. - у Вас на шине адреса расположены регистры управления конкретным модулем ШИМ. таких одинаковых модулей на шине 18, как я понял из Ваших слов.

функция это Ваша конкретная реализация какого-то действия. это не в контроллере - это у Вас в голове. gcc не предоставляет библиотеки для всей этой ерунды - она предоставляет интерфейс для работы с конкретным ядром и в общем-то всё.
besogon вне форума   Ответить с цитированием
Старый 13.05.2019, 11:09   #24
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 43
Сообщений: 4,500
Вес репутации: 2476/116
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Подскажите по указателям

Цитата:
Сообщение от BarsTmb Посмотреть сообщение
Вы где-то недопоняли с дефайнами… Первая строка - макрос для доступа к регистру. Вторая - указатель на тот же регистр (о чем ненавязчиво напоминает _PTR в имени).
Амперсандом Вы опять же делаете из регистра указатель. У вас инициализируется массив указателей, причем по две соседние строки одним и тем же.
Я вижу что регистр тот же в обеих строках, но в одной период задается первому каналу ШИМ, а во второй второму (там по два ШИМ канала в каждом модуле) ..Возможно модуль 16-битный, а ШИМ 8 битные и такими дефайнами как то меняется младший и старший байты 16 битного регистра?..

Цитата:
Сообщение от besogon Посмотреть сообщение
maagalex
и они не в массиве чтобы просто а[b]=x , а модифицируются вызовом функций.. - у Вас на шине адреса расположены регистры управления конкретным модулем ШИМ. таких одинаковых модулей на шине 18, как я понял из Ваших слов.

функция это Ваша конкретная реализация какого-то действия. это не в контроллере - это у Вас в голове. gcc не предоставляет библиотеки для всей этой ерунды - она предоставляет интерфейс для работы с конкретным ядром и в общем-то всё.
Ну мне же удалось поменять каждый сторой регистр через указатели, и поиском по проекту я вышел на тело функции, эти дефайны и в конечном счете адрес того регистра в памяти..Вопрос только как их модифицировать через указатель все?..
Подсказку от bzx еще не проверял, попробую сегодня..
maagalex вне форума   Ответить с цитированием
Старый 13.05.2019, 11:19   #25
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 33
Сообщений: 2,182
Вес репутации: 4133/90
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: Подскажите по указателям

maagalex
я вышел на тело функции, эти дефайны и в конечном счете адрес того регистра в памяти - в данном случае Вам нужен datasheet. в нем должна быть раскладка памяти и описание работы модуля.
besogon вне форума   Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
16f877 подскажите по прерываниям alx71 Продукция MICROCHIP 12 19.09.2011 16:39
Подскажите, пожалуйста, по Configuration Bits LeoN Продукция MICROCHIP 4 06.05.2011 10:04
Подскажите по 18F252 AlexKid Продукция MICROCHIP 7 22.02.2011 12:25
Подскажите по ИК RC-5 плиз... Marat Общетехнические вопросы 2 02.10.2009 17:54
Подскажите по настройке ШИМ-а модуля CCP AleksBak Продукция MICROCHIP 5 18.04.2008 14:25


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


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