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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 30.05.2018, 17:50   #1
alex_new_2030
Senior Member
 
Аватар для alex_new_2030
 
Регистрация: 26.02.2007
Возраст: 39
Сообщений: 204
Вес репутации: 105/45
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
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
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
Возраст: 39
Сообщений: 204
Вес репутации: 105/45
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
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
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
Возраст: 39
Сообщений: 204
Вес репутации: 105/45
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
Адрес: Ставрополь
Возраст: 47
Сообщений: 400
Вес репутации: 645/41
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию 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
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
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
Возраст: 39
Сообщений: 204
Вес репутации: 105/45
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
Возраст: 45
Сообщений: 1,492
Вес репутации: 2283/74
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,465
Вес репутации: 2482/75
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
Возраст: 39
Сообщений: 204
Вес репутации: 105/45
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
Возраст: 31
Сообщений: 1,777
Вес репутации: 3483/74
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,465
Вес репутации: 2482/75
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 вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 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, время: 18:35.


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