Страница 1 из 4
непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 13:21:27
jazz393
здравствуйте
есть такой код для перевода символов для ЖКИ, если подставлять его тупо в массив то всё ок работает, но это неудобно, поэтому написал пару функций:
Спойлер
Код: Выделить всё
unsigned char alf(char a)
{
switch (a)
{
case 'А': return 0x41; case 'а': return 0x61; break;
case 'Б': return 0xA0;case 'б': return 0xB2; break;
//пропускаю таблицу дабы сэкономить место
case ' ': return 0x20; case ',': return 0x2C; break;
}
}
есть такая функция для ввода в глобальный массив S:
Спойлер
Код: Выделить всё
void getChar(char *a)
{
for (i=0;i<21;i++)
{
S[i]=alf(a[i]);
if (a[i]=='А') // сравниваю тупо вручную русский симол А с массивом
PORTA=0x10; //
}
i=0;
}
сам вызов функции:
вообще эффекта ноль, толи оишбка в том что не получается инициализировать char* a строкой вида "АБВГДЖЗ ") , Толи я уж теряюсь....
пробовал оптимизатор выкл/вкл, не то
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 13:45:06
BCluster
Строка это const char*, у вас аргумент char*, возможно дело в этом. Компилятор какой?
попробуйте так
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 13:51:38
jazz393
atmel studio 6 ,
GCC avr там вроде
const char* тоже не принёс результатов
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 16:50:48
ИС-пытатель
CHAR- это размер переменной. 1 байт в твоем случае. Ты передаешь в функцию значение "АБВ ". В шестнадцатиричном виде это выглядит как набор байтов. Поскольку у тебя размер CHAR, то у тебя функция тупо берет последний (младший) байт. Т.е. пробел и что-то с ним делает.
Если ты хочешь работать со строкой, значит объяви ее как массив где-либо в памяти. А в свою функцию передавай указатель на этот массив. В функции можешь реализовать операции с массивом, его модификацию и т.д. А возвращать из нее также либо указатель на этот модифицированный массив, либо на вновь созданный в ходе перевода.
P.C. Напрограммируются на всяком строго нетипизированном говне типа JavaScript, где мозг включать не надо, а потом обижаются, что в нормальных языках ничего не работает.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 17:26:21
BCluster
У него функция принимает char* а не char, причем тут 1 байт?
ИС-пытатель писал(а): строго нетипизированном говне
это как?

Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 17:45:21
ИС-пытатель
А.. Прошу прощения. Бегло просмотрел. Все равно ошибка. Должен функции передавать адрес на строку (то бишь указатель на массив), а передает значение. Вот у него и не робит ничего. Плюс, где разыименование указателя в функции? и все равно функция берет последние 2 байта из переданного ей значения.
А про нетипизированные, это когда нет типов переменных. Тупо пишешь a = 10 - и компилятор понимает. пишешь b = "АБВ" и компилятор тоже понимает. а потом пишешь с = a + b... И компилятор, сцуко, тоже понимает как это обработать...
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:13:52
BCluster
Бывает сильная типизация и слабая.
Си - язык с со слабой типизацией, кстати...
То что написали вы, называется динамической типизацией, которая, например в питоне, является сильной. Одно другому не мешает.
Ладно тема не об этом
Плюс, где разыименовывание указателя в функции?
он берет по индексу значение
ИС-пытатель писал(а):а передает значение
стандартная функция sprintf() принимает в качестве аргумента char*, и вполне понимает когда ей передают строку.
ТС, попробуй для эксперимента так:
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:29:47
ИС-пытатель
Я сейчас не говорю про стандартные функции (и не факт, что они в АВР работают так, как Вы говорите). Я сейчас говорю про этот код. Чтобы у него заработало, он должен передать не значение, а адрес. т.е. создать массив символов и в функцию уже передать имя массива
. И в самой функции обращаться как к разыменованной переменной. А он обращается напрямую (т.е. к адресу). То есть надо сделать так, как Вы сказали выше.
+ Не факт, что если в СИ для PC массив - это адрес первого значения (т.е. по сути, указатель), то и здесь также. Если после Вашего объявления не заработает, то можно попробовать пользовать переменную не так a, а вот так: (*a+i)
Динамическая типизация - немного другое. А вот JavaScript, например, нетипизированный. потому что вы можете одной и той же переменной присвоить абсолютно любое значение и компилятор Вас не обматерит.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:38:19
jazz393
ИС-пытатель писал(а):А.. Прошу прощения. Бегло просмотрел. Все равно ошибка. Должен функции передавать адрес на строку (то бишь указатель на массив), а передает значение. Вот у него и не робит ничего. Плюс, где разыименование указателя в функции? и все равно функция берет последние 2 байта из переданного ей значения.
А про нетипизированные, это когда нет типов переменных. Тупо пишешь a = 10 - и компилятор понимает. пишешь b = "АБВ" и компилятор тоже понимает. а потом пишешь с = a + b... И компилятор, сцуко, тоже понимает как это обработать...
обычно пишу на нетипизированном как вы выразились ... - С++ =))
В функцию я передаю указатель, вызываю по индексу, что собственно равноценно
в таблицу с кодировкой символов я добавляю скажем case 's':PORTA=0x08; - и при вызове getChar(" s ") диод привязанный к 4 порту А горит, т.е. всё тоже самое с латиницей работает... проблема о всей видимости в кодировке в самой atmel studio , хотя не нашёл там в настойках где её менять...=((
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:40:44
BCluster
ИС-пытатель писал(а):не факт, что они в АВР работают так, как Вы говорите
факт
ИС-пытатель писал(а):А он обращается напрямую (т.е. к адресу).
покажите мне, пожалуйста, где он обращается К АДРЕСУ?
ИС-пытатель писал(а):Динамическая типизация - немного другое. А вот JavaScript, например, нетипизированный.
http://ru.wikipedia.org/wiki/%D0%94%D0% ... 0%B8%D1%8F
т.е. создать массив символов и в функцию уже передать имя массива
я выше написал ему, попробовать так сделать
но что это поменяет, я не знаю
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:41:14
ИС-пытатель
СИ++ слабо типизированный.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:45:52
BCluster
jazz393 писал(а):в таблицу с кодировкой символов я добавляю скажем case 's':PORTA=0x08; - и при вызове getChar(" s ") диод привязанный к 4 порту А горит
у меня была такая мысля, кодвижн таким страдает, gcc не слышал чтобы. Но видимо все-таки дело в этом.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:46:28
ИС-пытатель
я выше написал ему, попробовать так сделать
но что это поменяет, я не знаю
Еще раз говорю, в таком случае, Вы передадите адрес на массив. А в его случае он передает значение. А функция думает, что это адрес. Или же пусть попробует в объявлении функции указать
void GetChar (char *a[]) или (char a[]). Лишь бы компилятор не заругался на отсутствие размера массива.. Все-таки не PC..
может, так прокатит, если вы говорите, что стандартные функции понимают, когда им так запихиваешь значение.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:49:22
ИС-пытатель
BCluster, Вы ссылаетесь на википедию, а я ссылаюсь на литературу, которую читал по JavaScript, в которой написано именно так, как говорю сейчас я. Поскольку однозначного определения нет данного понятия, то и Ваше мнение, и мое, и Википедии - всего лишь точки зрения.
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:52:10
BCluster
http://anpaza.livejournal.com/16361.html
тут про кодировки, в ключах компилятора ставится. Почитай, может поможет
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 18:53:07
ИС-пытатель
Вся проблема, что значение 'АБВ ' никакой переменной не присвоено. И компиль думает, что это просто числовая константа. Вот и пихает ее в функцию. А если присвоите переменной - то это будет уже адрес
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 19:01:36
BCluster
ИС-пытатель писал(а):void GetChar (char *a[])
массив указателей зачем? Вы вообще понимаете о чем говорите?
Еще раз говорю, в таком случае, Вы передадите адрес на массив. А в его случае он передает значение.
неправда. Прямо сейчас попробовал сделать...
ИС-пытатель писал(а):может, так прокатит, если вы говорите, что стандартные функции понимают, когда им так запихиваешь значение.
у стандартных функций аргумент char*
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 19:23:35
ИС-пытатель
Вот теперь верю. )
А что у Вас за ассемблер такой интересный? ) и что за среда разработки?
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 20:36:36
BCluster
Это IAR
,ассемблер thumb2 вроде. Cortex M4F, с АВР давно не работаю, но думаю, тоже самое и там )
Тем более товарищ написал что проблемы именно с кириллицей
Re: непонимаю в чем проблема - перевод символов
Добавлено: Пт мар 28, 2014 20:42:24
ИС-пытатель
То-то я смотрю, команды другие... Желательно бы проверить все-таки для АВР... Арм -уровень другой.