
1、struct StudentCreate():定义函数Create,函数返回值为指向结构体Student类型的指针。
2、定义结构体:struct Student{……};定义指向结构体的指针:struct Student p;定义返回值为指向结构体指针的函数:struct Student Create(){……}
3、malloc函数返回值为void ,pEnd和pEnw的类型为 struct Strudent ,类型不一致,需要对赋值运算符右边的表达式值进行强制类型转换。强制类型转换的方法是(类型名),所以是(struct Student )。
int fputc(int ch, FILE f)
{
OS_ERR err;
CPU_TS ts;
Dbg_printf_time[Dbg_printf_cnt++] = STK_VAL_REG; //进入函数前读取systick的寄存器值
Dbg_printf_inter[Dbg_printf_cnt] = Dbg_printf_time[Dbg_printf_cnt-2] - Dbg_printf_time[Dbg_printf_cnt-1];//用刚读取的寄存器值减去上一次退出该函数的寄存器值,从而得到两次进入该函数之间的时间
while (HAL_UART_Transmit_IT(&huart, (uint8_t )&ch, 1) != HAL_OK)
{
OSTaskSemPend(10, OS_OPT_PEND_BLOCKING, &ts, &err);
//check “err”
}
Dbg_printf_time[Dbg_printf_cnt++] = STK_VAL_REG; //退出函数前读取systick的寄存器值
Dbg_printf_inter[Dbg_printf_cnt] = Dbg_printf_time[Dbg_printf_cnt-2] - Dbg_printf_time[Dbg_printf_cnt-1];//用刚读取的寄存器值减去进入该函数的寄存器值,从而得到两次进入该函数之间的时间
if (Dbg_printf_cnt > 90)
{
Dbg_printf_cnt = 1;
}
return ch;
}
PendSV指可悬起系统调用
一般用在上了 *** 作系统的软件开发中
*** 作系统通常不让用户程序直接访问硬件,而是通过提供一些系统服务函数,让用户程序使用 SVC 发出对系统服务函数的呼叫请求,以这种方法调用它们来间接访问硬件。因此,当用户程序想要控制特定的硬件时,它就要产生一个 SVC异常,然后 *** 作系统提供的 SVC异常服务例程得到执行,它再调用相关的 *** 作系统函数,后者完成用户程序请求的服务。
stm32中GPIO口的最大输出速度如何理解
1,是这样的,2M、10M和50M是指GPIO口的采样频率。。不知这样理解对不对,我就是这样做的。
2,我通过PB6采集80KBPS/S的方波,通过中断计采集,完全胜任。
同时使用多个内核对象
uC/OS-III 只允许同时等待多个信号量和消息队列,不能同时等待多个事件标志组或mutex。
这里写描述
任务接收到一个信号量或消息,就会进入就绪。任务通过调用OSPendMulti()等待多个对象。
/1定义OS_PEND_DATA数组/
OS_OBJ_QTY index;
OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM];//定义数组
/2放入消息队列或者信号量/
pend_multi_tbl[0]PendObjPtr=(OS_PEND_OBJ)&Test_Sem1;
pend_multi_tbl[1]PendObjPtr=(OS_PEND_OBJ)&Test_Sem2;
pend_multi_tbl[2]PendObjPtr=(OS_PEND_OBJ)&Test_Q;
/3等待多个内核,返回准备好,停止或者删除的内核对象数量/
index=OSPendMulti((OS_PEND_DATA )pend_multi_tbl,//内核对象数组
(OS_OBJ_QTY)CORE_OBJ_NUM, //内核数量
(OS_TICK)0,
(OS_OPT)OS_OPT_PEND_BLOCKING,
(OS_ERR)&err);
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)