if (disk_read(fs->drv, fs->win, sector,1) != RES_OK)
return FR_DISK_ERR;
SET_DIO_PAR(fs->drv, fs->win, sector,1);
if (disk_read() != RES_OK)
return FR_DISK_ERR;
//Parameters for disk_read and disk_write
typedef struct {
BYTE drv;
const BYTE* buf;
DWORD* sec;
BYTE num;
} DIO_PAR;
extern DIO_PAR dio_par;
#define SET_DIO_PAR(dr_drv,dr_buf,dr_sec,dr_num) {\
dio_par.drv=dr_drv; \
dio_par.buf=dr_buf; \
dio_par.sec=&dr_sec; \
dio_par.num=dr_num;}
fk0 wrote:Дурость, дурость и ещё раз дурость. Нет проблем с ассемблером и параметрами,
И опять же аццкой экономией.fk0 wrote:А статические переменные кончаются аццким гоновкодом и бесконечными глюками.
DimkaM wrote:Как в ИАРе сделать хитрый макрос?
В SDCC тоже не замечал.fk0 wrote:Нет проблем с ассемблером и параметрами, по крайней мере в hitech C
Мож код фатфс неоптимален? Голый асм для фат16 не более 4Кб, для Си думаю будет не больше 8Кб. Фат32 по сути только оперирует в двое большими операндами, не думаю что код будет сильно раздутее фат16. Буфера нормально в 2Кб уложить.DimkaM wrote:но тогда вообще ни один драйвер в страницу с фатфс не лезет, экономия ощутимая
DimkaM wrote:Проблем нету, но тогда вообще ни один драйвер в страницу с фатфс не лезет, экономия ощутимая. Тама таких вызовов штук тридцать, через регистры максимум два ворда передаётся, всё остальное через стек.
А статические переменные кончаются аццким гоновкодом и бесконечными глюками.
И опять же аццкой экономией.
Про макросы лучше расскажи чёнить.
deathsoft wrote:Юзать надо естественно структуру на стеке с адресацией через IX, IY. В программу на асме передавать адрес этой структуры.
Users browsing this forum: No registered users and 6 guests