Это тупиковый путь.
ЗЫ . "Проблема" pashka решена.
Стесняюсь спросить, а что делает функция malloc(), как вы думаете?/* это я закоментил
//ptr = malloc(sizeof(uint8_t) * BlockSize);
ptr = (uint8_t *) █
// if (ptr == NULL)
// {
// goto error;
// }
// visnet tut
memset(ptr, SD_DUMMY_BYTE, sizeof(uint8_t) * BlockSize);
*/
в этой процедурке зависало на строке
заремил её и вроде как все полетело и без проблем! а что не так с этит мемсетом? это ж просто очистка буффера!? что тут я сделал не так?Код: Выделить всё
memset(ptr, SD_DUMMY_BYTE, sizeof(uint8_t) * BlockSize);
Сами придумали, или скопировали где-то?Код: Выделить всё
uint32_t ClrA = 0xFF << 16; ... *buf = GPIOA->IDR&0xFF;
Код: Выделить всё
*buf = GPIOA->IDR&0xFF;Код: Выделить всё
uint32_t ClrA = 0xFF << 16;В функции Ram_Read задан тип указателя char* buf, т.е. он и без всяких эндов скопирует только младшие 8 бит за проход.а что тут не то? мне надо положить в буффер часть порта а. у меня а0-а7 это шина данных оперативки. указатель буффера я инкрементирую вконце а это - ну читаю из входного регистра и накладываю маску чтоб попадало в фуффер только то что надо. Что в этом такого?
Код: Выделить всё
uint32_t ClrA = 0xFF << 16;Идея, конечно, гениальная. Да, два байта справа занулятся. Второй байт проэндится с 0xFF. А байт слева?это были попытки оптимизации по скорости работы. кроме того это сейчас оно такой вид имеет а потом там будет битмаска покруче чем просто 8 единиц.
А работать через указатели с портами не пробовали? Хотя кодвижн, да...просто на макетке разводка не важна а вот в реальной плате для удобства разводки без переходных - прийдется переназначать и не факт что получится поподряд выбрать биты на порту - армы эти по-идиотически сделаны в плане распиновки.
Сложно сказать, судя по отрывкам вашего кода, что конкретно там не так. Надо смотреть переменные, которые вы передаете в функцию, в частности uint16_t BlockSize. Как вариант, поскольку память заранее выделена не была, memset, возможно, затирает действительные переменные. С другой стороны, учитывая сам стиль кодинга в местах работы с периферией прямо из while(), довольно неочевидные приемы обращения к памяти, уже как-то не сильно удивляет, что дивайс ваш глючит, имхо конечно.По поводу маллок и мемсет я знаю что они делают но вопервых не я заремил маллок а во вторых какова хрена мемсет мне стек портит? ведь если есть буффер и есть его размер - почему налазит на стек? Эти либы не я писал - это в CubeMX FatFS и ведь у многих она ж работает без проблем..ну да нету sdio у f100 ну дак и что? spi режим запрещен?
Код: Выделить всё
// visnet tut
memset(ptr, SD_DUMMY_BYTE, sizeof(uint8_t) * BlockSize);
*/
ptr = (uint8_t *) █Код: Выделить всё
...
memset(block, SD_DUMMY_BYTE, BlockSize);
...
SD_IO_WriteReadData((uint8_t *)&block, (uint8_t*) pData + offset, BlockSize);
...