代码:
- void TIMER16_IRQHandler(void)
- {
- if(SET == timer_interrupt_flag_get(TIMER16, TIMER_INT_UP)){
- /* clear channel 0 interrupt bit */
- timer_interrupt_flag_clear(TIMER16, TIMER_INT_UP);
- /* toggle selected led */
- g_bsl.tick_1ms++;
- }
- }
- uint32_t get_timer_tick(void)
- {
- return g_bsl.tick_1ms;
- }
- void delay_1ms(uint32_t xms)
- {
- volatile uint32_t tick,diff=xms;
- SET_TICK(tick);
- /*while(GET_DIFF_TICK(tick) < diff){}*/
- while(xms){
- diff = (0x100000+get_timer_tick()-tick)&0xFFFFF ;
- while(diff < 1){
- diff = (0x100000+get_timer_tick()-tick)&0xFFFFF ;
- }
- SET_TICK(tick);
- xms--;
- }
- }
复制代码 这个函数就是延时多少毫秒,这个毫秒计数器通过一个毫秒中断一直增加。
这个是5.0编译器的结果,杠杠的:
这个是6.0的结果,不加volatile直接给你优化了,等级为Oz,循环一直出不去,我没辙了,大家救救我吧:
|
如何改进代码呢?求教!
hal_delay原理跟这个一样,我这个还有溢出处理。
你的回答是正确的!高手。